J’ai un fichier où je veux imprimer chaque entrée pour une colonne i> N suivie du contenu de la colonne suivante. Chaque ligne a le même nombre de colonnes. Un exemple d’entrée:
abcd a1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3
dire dans ce cas, je veux sauter la première colonne de sorte que le résultat souhaité serait
b b1 b2 b3 c c1 c2 c3 d d1 d2 d3
Je me suis approché de ce que je voulais en utilisant
awk '{for(i=2; i<=NF; print $i; i++)}'
mais ceci imprime chaque entrée dans une ligne consécutivement au lieu de toutes les entrées de chaque colonne consécutivement.
Merci d’avance
Si chaque ligne a le même nombre de champs, vous pouvez faire:
awk ' { for(i=2;i<=NF;i++) rec[i]=(rec[i]?rec[i]RS$i:$i) } END { for(i=2;i<=NF;i++) print rec[i] }' file
Si le nombre de champs est irrégulier, vous devez vous rappeler quelle ligne a le nombre maximum de champs.
awk ' { for(i=2;i<=NF;i++) { rec[i]=(rec[i]?rec[i]RS$i:$i) } num=(num>NF?num:NF) } END { for(i=2;i<=num;i++) print rec[i] }' file
Sortie:
b b1 b2 b3 c c1 c2 c3 d d1 d2 d3
Utiliser la cut
serait plus facile ici:
# figure out how many fields read -a fields < <(sed 1q file) nf=${#fields[@]} # start dumping the columns. n=3 for ((i = n; i <= nf; i++)); do cut -d " " -f $i file done