Je voudrais imprimer la 1ère à la 10ème colonne, la 23ème colonne et la 27ème colonne de ifile.txt. Je peux imprimer les 1ère à 10ème colonnes en utilisant
awk '{n=10; for (i=1;i<=n;i++) printf "%f ", $i; print "";}' ifile.txt
Mais je ne peux pas y append les 23ème et 27ème colonnes.
J’ai essayé avec les suggestions suivantes, il y a toujours quelques problem.eg, mon ifile.txt est:
ifile.txt 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Pendant que j’utilise le suivant
#!/bin/bash awk '{ n=10 for (i=1; i<=n; i++) a[$i] a[$23] a[$27] for (k in a) printf "%5.1f", k, FS print "" }' ifile.txt
Il donne
4.0 27.0 5.0 6.0 7.0 8.0 9.0 10.0 23.0 1.0 2.0 3.0 4.0 27.0 5.0 6.0 7.0 8.0 9.0 10.0 23.0 1.0 2.0 3.0 4.0 27.0 5.0 6.0 7.0 8.0 9.0 10.0 23.0 1.0 2.0 3.0 4.0 27.0 5.0 6.0 7.0 8.0 9.0 10.0 23.0 1.0 2.0 3.0 4.0 27.0 5.0 6.0 7.0 8.0 9.0 10.0 23.0 1.0 2.0 3.0 4.0 27.0 5.0 6.0 7.0 8.0 9.0 10.0 23.0 1.0 2.0 3.0 4.0 27.0 5.0 6.0 7.0 8.0 9.0 10.0 23.0 1.0 2.0 3.0
Et pendant que j’utilise
cut -d ' ' -f1-10,23,27 ifile.txt
Il donne
1 2 3 4 5 6 7 8 9 22 26 1 2 3 4 5 6 7 8 9 22 26 1 2 3 4 5 6 7 8 9 22 26 1 2 3 4 5 6 7 8 9 22 26 1 2 3 4 5 6 7 8 9 22 26 1 2 3 4 5 6 7 8 9 22 26 1 2 3 4 5 6 7 8 9 22 26
Je pouvais comprendre cela et résolu en modifiant
cut -d ' ' -f2-11,24,28 ifile.txt
Le problème était qu’il y avait un espace avant que chacun ne commence. Mais je me demande une façon générale de le faire pour qu’elle ne voie pas l’espace de départ.
$del=' ' cut -d "$del" -f1-10,23,27 file
Afin de ne pas vous répéter avec printf
, vous pouvez créer un tableau de tous les champs souhaités et les parcourir en boucle.
{ n=10 for (i=1; i<=n; i++) a[$i] a[$23] a[$27] for (k in a) printf "%f%s", k, FS print "" }
Je suppose que vos champs sont délimités par des espaces.
Vous pouvez essayer avec la cut
,
cut -d ' ' -f1-10,23-27 yourfile
Explication:
-d - Delimiter -f - Fields
En Perl, vous pouvez essayer
perl -lane '@F = split (); print join(" ",@F[0..9,22..26])' input_file > output_file