我有这样一个文件:
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)
使用起来会更容易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转置行和列。
这可能有效:
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中看到它.