如何将列数据传输到行(使用awk)?

mah*_*ood 11 linux awk rows

我有这样一个文件:

n A B C D 
1 01 02 01 01
2 02 02 01 01
Run Code Online (Sandbox Code Playgroud)

我想按行传输列,所以输出应该是这样的:

n 1 2
A 01 02
B 02 02
C 01 01 
D 01 01
Run Code Online (Sandbox Code Playgroud)

我写了这个命令:

awk '{ for (i=1;i<=NF;i++ ) printf $i " " }' file.txt > out-file.txt
Run Code Online (Sandbox Code Playgroud)

问题是这个命令把所有东西放在一行!所以输出是这样的:

n 1 2 A 01 02 B 02 02 C 01 01 D 01 01
Run Code Online (Sandbox Code Playgroud)

nis*_*ama 8

使用起来会更容易rs

$ cat /tmp/a
n A B C D
1 01 02 01 01
2 02 02 01 01
$ rs -c' ' -C' ' -T</tmp/a
n 1 2
A 01 02
B 02 02
C 01 01
D 01 01
Run Code Online (Sandbox Code Playgroud)

-c更改输入列分隔符,-C更改输出列分隔符,并-T转置行和列。


Zso*_*kai 7

这可能有效:

awk '{
       for (f = 1; f <= NF; f++) { a[NR, f] = $f } 
     }
     NF > nf { nf = NF }
     END {
       for (f = 1; f <= nf; f++) {
           for (r = 1; r <= NR; r++) {
               printf a[r, f] (r==NR ? RS : FS)
           }
       }
    }' YOURINPUT
Run Code Online (Sandbox Code Playgroud)

在Ideone中看到它.