每5个条目后拆分一列-awk
我有一个如下所示的文件每5个条目后拆分一列-awk,awk,rows,Awk,Rows,我有一个如下所示的文件 1 1 1 1 1 1 12 2 2 2 2 2 2 2 3 4 我要做的是将此列转换为多行。每个新行/行应该在5个条目之后开始,因此输出如下 1 1 1 1 1 1 12 2 2 2 2 2 2 2 3 4 我试图通过使用 awk '{printf "%s" (NR%5==0?"RS:FS),$1}' file 但是我得到了以下错误 awk: line 1: runaway string constant "RS:FS),$1} ... 关于如何达到预期的输出有
1
1
1
1
1
1
12
2
2
2
2
2
2
2
3
4
我要做的是将此列转换为多行。每个新行/行应该在5个条目之后开始,因此输出如下
1 1 1 1 1
1 12 2 2 2
2 2 2 2 3
4
我试图通过使用
awk '{printf "%s" (NR%5==0?"RS:FS),$1}' file
但是我得到了以下错误
awk: line 1: runaway string constant "RS:FS),$1} ...
关于如何达到预期的输出有什么想法吗?也许这个awk one liner会有所帮助
awk '{if (NR%5==0){a=a $0" ";print a; a=""} else a=a $0" "}END{print}' file
输出:
1 1 1 1 1
1 12 2 2 2
2 2 2 2 3
4
更长的awk:
{
if (NR%5==0)
{
a=a $0" ";
print a;
a="";
}
else
{
a=a $0" ";
}
}
END
{
print
}
略微不同的方法,仍然使用awk:
$ awk '{if (NR%5) {ORS=""} else {ORS="\n"}{print " "$0}}' input.txt
1 1 1 1 1
1 12 2 2 2
2 2 2 2 3
4
使用perl
:
$ perl -p -e 's/\n/ / if $.%5' input.txt
1 1 1 1 1
1 12 2 2 2
2 2 2 2 3
4
没有必要把事情复杂化
$ pr -5ats' ' <file
1 1 1 1 1
1 12 2 2 2
2 2 2 2 3
4
$pr-5ats''RS前面有一个双引号@123谢谢你的评论!就是这样!!!但是,由于我不太熟悉awk
,出现了什么问题?坦率地说,我对printf“%s”(NR%5==0?”RS:FS)的$1命令也不确定;我刚在SE上找到它。你能给出一个答案,解释一下命令序列吗?