我想更改包含例如:
的文本文件 a 1
b 2
a 3
b 4
为:
a b
1 2
3 4
任何想法我怎么能做到这一点?我不熟悉awk,但我认为这是要走的路?
答案 0 :(得分:1)
我假设输入始终是两列,第一列包含 输出的列标题反复重复,而那个 输出可能包含一列或多列。
$ cat t.awk
{ sep = (FNR % n == 0) ? "\n" : " " }
NR==FNR { printf $1 sep; if (sep == "\n") nextfile; next; }
{ printf $2 sep }
调用awk时,输出列数设置为-v
。另请注意
输入文件需要在命令行上提供两次作为
脚本执行快速初始传递以打印输出列标题
在开始打印数据之前(懒得处理数组)。
两列输出:
$ cat file.txt
a 1
b 2
a 3
b 4
a 5
b 6
$ awk -v n=2 -f t.awk file.txt file.txt
a b
1 2
3 4
5 6
三栏输出:
$ cat file2.txt
a 1
b 2
c 3
a X
b Y
c Z
a @
b #
c $
$ awk -v n=3 -f t.awk file2.txt file2.txt
a b c
1 2 3
X Y Z
@ # $