Utiliser AWK pour prendre une série de colonnes et les imprimer en une seule colonne

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