Comment imprimer une gamme de colonnes à l'aide de la commande 'awk'

Comment imprimer une gamme de colonnes à l'aide de la commande 'awk'
La commande 'awk' est l'une des nombreuses commandes qui peuvent être utilisées pour imprimer une gamme de colonnes à partir de données tabulaires dans Linux. La commande 'awk' est peut être utilisée directement à partir du terminal en exécutant le fichier de script 'awk'. Dans ce tutoriel, nous vous montrerons comment imprimer une gamme de colonnes à partir de données tabulaires.

Exemple 1: Imprimez une gamme de colonnes à partir d'une sortie de commande

La commande suivante imprimera les deuxième, troisième et quatrième colonnes à partir de la sortie de commande, 'ls -l'. Ici, les numéros de colonne sont énoncés explicitement, mais une commande plus efficace pour imprimer la même plage de colonnes est affichée dans l'exemple suivant.

$ ls -l | awk 'print $ 2, $ 3, $ 4'

La sortie suivante est produite par la commande ci-dessus.

Exemple 2: Imprimez la plage de colonnes à partir d'un fichier en utilisant un pour boucle

Pour suivre cet exemple et les autres exemples de ce tutoriel, créez un fichier texte nommé Des marques.SMS avec le contenu suivant:

ID CSE203 CSE102 CSE202
1109 78 87 79
1167 67 81 70
1190 56 61 69
1156 89 55 78
199 54 66 58

La commande 'awk' suivante imprimera les trois premières colonnes de marques.SMS. Le pour la boucle est utilisée pour imprimer les valeurs de la colonne, et la boucle comprend trois étapes. Le NF La variable indique le nombre total de champs ou de colonnes du fichier.

$ Cat Marks.SMS
$ awk 'pour (i = 1; i<=NF-1;i++) printf $i" "; print ""' marks.txt

La sortie suivante sera produite en exécutant la commande. La sortie montre l'étudiant Identifiant Et les marques pour CSE203 et CSE102.

Exemple 3: Imprimez la gamme des colonnes en définissant les variables de démarrage et de fin

La commande 'awk' suivante imprimera les trois premières colonnes de la sortie de commande 'ls -l' en initialisant le départ et fin variables. Ici, la valeur du départ la variable est 1 et la valeur du fin la variable est 3. Ces variables sont itérées dans une boucle pour imprimer les valeurs de la colonne.

$ ls -l | awk 'begin premier = 1; dernier = 3
pour (i = d'abord; i < last; i++) printf("%s ", $i) print $last '

La sortie suivante apparaîtra après l'exécution de la commande. La sortie montre les trois premières valeurs de colonne de la sortie, «ls -l».

Exemple 4: Imprimez une gamme de colonnes à partir d'un fichier avec formatage

La commande 'awk' suivante imprimera les trois premières colonnes de Des marques.SMS en utilisant printf et séparateur de champ de sortie (De). Ici, la boucle FOR comprend trois étapes, et trois colonnes seront imprimées en séquence à partir du fichier. De est utilisé ici pour ajouter de l'espace entre les colonnes. Lorsque la valeur de comptoir de la boucle (i) est égale à fin variable, alors une nouvelle ligne (\ n) est générée.

$ Cat Marks.SMS
$ awk -v start = 1 -v end = 3 'for (i = start; i<=end;i++) printf("%s%s",
$ i, (i == fin) ? "\ n": ofs) 'marques.SMS

La sortie suivante sera générée après l'exécution des commandes ci-dessus.

Exemple 5: Imprimez la plage de colonnes à partir d'un fichier à l'aide d'une instruction conditionnelle

La commande 'awk' suivante imprimera les première et dernière colonnes à partir d'un fichier en utilisant une boucle pour une boucle et une instruction IF. Ici, la boucle for comprend quatre étapes. Le départ et fin Les variables sont utilisées dans le script pour omettre les deuxième et troisième colonnes du fichier en utilisant la condition IF. La variable OFS est utilisée pour ajouter de l'espace entre les colonnes, et la variable ORS est utilisée pour ajouter une nouvelle ligne (\ n) après imprimer la dernière colonne.

$ Cat Marks.SMS
$ awk -v start = 2 -v end = 3 'for (i = 1; i<=NF;i++)
if (i> = start && i<=end) continue;
else printf ("% s% s", $ i, (i!= Nf) ? Des marques: ors) '.SMS

La sortie suivante apparaîtra après avoir exécuté les commandes ci-dessus. La sortie montre les première et dernière colonnes de marques.SMS.

Exemple 6: Imprimez la plage de colonnes à partir d'un fichier à l'aide de la variable NF

La commande 'awk' suivante imprimera les première et dernière colonnes à partir du fichier en utilisant une variable NF. Aucune boucle ou instruction conditionnelle n'est utilisée pour imprimer les valeurs de la colonne. NF indique le nombre de champs. Il y a quatre colonnes dans les marques.SMS. $ (Nf-3) définit la première colonne, et $ nf indique la dernière colonne.

$ Cat Marks.SMS
$ awk 'print $ (nf-3) "" $ nf' marques.SMS

La sortie suivante est produite en exécutant les commandes ci-dessus. La sortie montre les première et dernière colonnes de marques.SMS.

Exemple 7: Imprimez la plage de colonnes à partir d'un fichier utilisant substr () et index ()

La fonction index () renvoie une position si la deuxième valeur d'argument existe dans la première valeur d'argument. La fonction substr () peut prendre trois arguments. Le premier argument est une valeur de chaîne, le deuxième argument est la position de départ, et le troisième argument est la longueur. Le troisième argument de substr () est omis dans la commande suivante. Parce que la colonne commence à partir de 1 1 dans la commande 'awk', la fonction index () renverra 3 $ et la commande imprimera de 3 $ à 4 $.

$ Cat Marks.SMS
$ awk 'imprimer substr ($ 0, index ($ 0, $ 3))' marques.SMS

La sortie suivante sera produite en exécutant les commandes ci-dessus.

Exemple 8: Imprimez séquentiellement une gamme de colonnes à partir d'un fichier à l'aide de printf

La commande 'awk' suivante imprimera les première, deuxième et troisième colonnes de marques.txt en définissant suffisamment d'espace pour 10 caractères.

$ Cat Marks.SMS
$ awk '// printf "% 10s% 10s% 10s \ n", 1 $, $ $, $ 2' Marques.SMS

La sortie suivante sera produite en exécutant les commandes ci-dessus.

Conclusion

Il existe différentes façons d'imprimer la plage de colonnes à partir de la sortie de commande ou d'un fichier. Ce tutoriel montre comment la commande 'awk' peut aider les utilisateurs de Linux à imprimer du contenu à partir de données tabulaires.