Awk pour ignorer les lignes vides

la sortie de mon script est délimitée par l'ongletawk comme :

awk -v variable=$bashvariable  '{print variable"t singlet" "t double"}' myinfile.c

est exécutée dans une boucle while qui met à jour la valeur de la variable et le fichier myinfile.c pour chaque cycle. J'obtiens les résultats attendus avec cette commande . Mais si le inmyfile.c contient une ligne vierge (il peut contenir) il n'imprime aucune information pertinente. puis-je dire awk pour ignorer la ligne blanche ?

je sais que cela peut être fait en enlevant les lignes vides de myinfile.c avant de le transmettre à awk . Je suis dans la connaissance de l' sed et tr mais je veux awk le faire dans la commande elle-même et pas une solution en tant que ci-dessous ou une canalisation d'eau.

sed '/^$/d' myinfile.c
tr -s "n" < myinfile.c

Merci d'avance pour vos suggestions et réponses.

25
demandé sur Gil 2012-07-27 15:51:05

4 réponses

Il existe deux approches que vous pouvez essayer de filtrer les lignes:

awk 'NF' data.txt

et

awk 'length' data.txt

il suffit de les placer au début de votre commande, i.e.,

awk -v variable=$bashvariable 'NF { print variable ... }' myinfile

ou

awk -v variable=$bashvariable 'length { print variable  ... }' myinfile

ces deux éléments agissent en tant que "gatekeepers" /if-statements.

la première approche ne fonctionne qu'en imprimant des lignes où le nombre de champs (NF) n'est pas nul (c.-à-d. supérieur à zéro).

la deuxième méthode examine la longueur de ligne et agit si la longueur n'est pas nulle (c.-à-d. supérieure à zéro)

Vous pouvez choisir l'approche qui convient le mieux pour vos données/besoins.

41
répondu Levon 2012-07-27 12:22:04

vous pouvez juste ajouter

/^\s*$/ {next;}  

à l'avant de votre script qui correspondra aux lignes vierges et sautera le reste des règles de correspondance awk. Mettre tout cela ensemble:

awk -v variable=$bashvariable '/^\s*$/ {next;} {print variable"\t single\t" "\t double"}' myinfile.c
9
répondu beny23 2012-07-27 11:56:58

peut-être que vous pourriez essayer ceci:

awk -v variable=$bashvariable  '{print variable"\t single\t" "\t double"}' myinfile.c
2
répondu Kent 2012-07-27 11:54:52

essaye ceci:

awk -v variable=$bashvariable '/^.+$/{print variable"\t single\t" "\t double"}' myinfile.c
1
répondu Mithrandir 2012-07-27 11:54:57