0
votes

Supprimer une ligne entière Si un mot spécifique est plus long que x caractères, les mots de la ligne délimité par virgule

J'ai un fichier .sql avec plus de 1000000 rangées. J'ai besoin de supprimer les lignes contenant plus de x caractères sur la troisième "colonne" (les colonnes sont séparées par virgule)

J'ai essayé d'utiliser certains VI, SED et AWK. Aussi Notepad ++ mais n'a pas réussi à subir de ces xxx

Les mots de la troisième colonne délimité par virgade contenant moins de 8 caractères que je veux garder la rangée, celles qui sont plus longs que 8, j'ai besoin de supprimer toute la ligne.

J'ai essayé de supprimer manuellement mais il y a trop de lignes


6 commentaires

Votre dossier ressemble-t-il vraiment à cela? Veuillez éditer votre question pour montrer comment votre fichier ressemble exactement à votre fichier


Vous obtiendrez une réception beaucoup plus amicale et une meilleure meilleure aide ici si vous montrez quel code vous avez essayé jusqu'à présent, cependant inadéquat et décrivez quels problèmes vous aviez avec elle. Sans code, votre question ressemble à une demande de consultation gratuite et de nombreuses personnes n'aiment pas cela.


Vous avez mentionné @Raul Chiarella que vous avez essayé peu de choses, nous encourageons toujours les gens à afficher leurs efforts dans leur poste, alors veuillez les ajouter (ainsi que répondre aux questions posées dans les commentaires par les utilisateurs) et laissez-nous savoir alors.


AWK -F '[] +' '(Longueur (3 $) -2) <8' Nom de fichier peut être ce que vous cherchez. Mais votre fichier d'entrée ne semble pas suivre un motif. Par exemple, vous n'avez pas de délimiteurs entre la parenthèse d'ouverture et le premier champ, mais vous en avez un entre le dernier champ et la parenthèse de fermeture.


Cela ressemble à une partie d'une déclaration d'insertion SQL, donc à celles qui demandent: "Oui, c'est probablement à quoi cela ressemble". Les chaînes seront encapsulées avec des guillemets simples. Raul, si cela ne serait-il que pour des lignes qui commencent par des parenthèses (ou toute autre règle)? Sinon, pourriez-vous insérer tout cela dans une table différente, puis filtrer ensuite? Ce serait sûrement plus raisonnable.


En outre, est-ce la seule instruction insertion dans ce fichier? Si tel est le cas, la division sur ' dans awk serait probablement plus facile.


3 Réponses :


2
votes

Si ce n'est pas tout ce dont vous avez besoin, modifiez votre question pour clarifier vos exigences et fournir une entrée / sortie d'échantillon plus représentative:

$ awk -F, 'length($3)<8' file
(255500, 0, '0093', 0.4350, 0.4350 ) - Keep this


0 commentaires

0
votes

Si vos données dans le fichier 'D', essayez GNU SED:

sed -E '/^[^,]+,[^,]+,\s*[^,]{9,}/d' d


0 commentaires

0
votes

Essayez avec ceci:

Recherche: ^ [^,] +, [^,] +, \ s * '[^'] {8,} '. * \ r? code> P>

Remplacer par: (rien) code> p>

Il doit fonctionner même lors de l'ajout d'espaces entre les données de colonne: p>

(255501, 0,          '12345678', 0.4350, 0.4350 )


0 commentaires