在perl或awk中每4列打印一行

时间:2013-12-16 10:26:46

标签: perl awk

您能帮我解决一下如何将每个4行序列转换为一个以制表符分隔的列吗?

转换:

A
1
2
3
3
3
4
1

到:

A   1  2  3
3   3  4  1

2 个答案:

答案 0 :(得分:8)

一种简单的方法是使用xargs

$ xargs -n4 < file
A 1 2 3
3 3 4 1

使用awk,您可以:

$ awk '{printf "%s%s",$0,(NR%4?FS:RS)}' file
A 1 2 3
3 3 4 1

另一种灵活的方法是使用pr

$ pr -tas' ' --columns 4 file
A 1 2 3
3 3 4 1

可以轻松修改awkpr解决方案,将输出分隔符更改为TAB

$ pr -at --columns 4 file
A         1         2             3
3         3         4             1                        

$ awk '{printf "%s%s",$0,(NR%4?OFS:RS)}' OFS='\t' file
A         1         2             3
3         3         4             1

答案 1 :(得分:3)

$ perl -pe 's{\n$}{\t} if $. % 4' old.file > new.file

或简单地(感谢mpapec的评论):

$ perl -pe 'tr_\n_\t_ if $. % 4' old.file > new.file