J'ai deux fichiers contenant comme ci-dessous
cat file1.txt
a b c
1 2 3
cat file2.txt
a
b
c
1
2
3
Je veux que file1 soit arrangé comme
a
b
c
1
2
3
et file2 à organiser comme
a b c
1 2 3
Je voudrais une solution utilisant awk one line
Une version awk
awk 1 RS=" |\n" file1 # gnu awk version
awk '{for (i=1;i<=NF;i++) print $i}' file1 # portable version
a
b
c
1
2
3
awk '{printf "%s" (NR%3==0?RS:FS),$1}' file2
a b c
1 2 3
printf "%s"
# paramètre d'impression n ° 1 (1 $)NR%3==0?"RS:FS
# ajouter un formatage supplémentaire. Tester si la ligne est le numéro 3. Si ce n'est pas le cas, utilisez FS (un espace vide), s'il s'agit de RS, une nouvelle ligne.
Ceci ajuste donc le paramètre suivant toutes les 3 lignes.
J'utiliserais xargs
pour ceci:
$ xargs -n1 < file1
a
b
c
1
2
3
$ xargs -n3 < file2
a b c
1 2 3
L’approche awk idiomatique consistant simplement à définir le paramètre OFS ou ORS sur FS ou RS selon les besoins avant d’imprimer (et de recompiler l’enregistrement si nécessaire avec $1=$1
) fonctionnera avec tout type awk:
$ cat file1
a b c
1 2 3
$ awk '{OFS=RS;$1=$1}1' file1
a
b
c
1
2
3
$ cat file2
a
b
c
1
2
3
$ awk '{ORS=(NR%3?FS:RS)}1' file2
a b c
1 2 3
Pour votre premier fichier, vous pouvez essayer quelque chose comme:
awk '{for (i=1 ; i <= NF ; i++) print $i}' file1.txt
Pour votre deuxième fichier, vous pouvez essayer quelque chose comme:
awk 'BEGIN {str=""; i=1} {if(i%3 == 0){str=str""$0"\n"} else {str=str""$0" "} i++} END {print str}' file2.txt
Cependant, je ferais des hypothèses telles que les trois lignes entières doivent sauter une ligne dans la sortie, par exemple. Nous aurions besoin de plus de détails je pense ...