用于更改文本格式的脚本

时间:2015-11-09 09:51:39

标签: linux shell awk

我想更改包含例如:

的文本文件

a 1
b 2
a 3
b 4

为:

a b
1 2
3 4

任何想法我怎么能做到这一点?我不熟悉awk,但我认为这是要走的路?

1 个答案:

答案 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
@ # $