我有一个文件,其中包含多行标签分隔数据,格式如下:
1 1 2 2
3 3 4 4
5 5 6 6
...
我想将格式更改为:
1 1
2 2
3 3
4 4
5 5
6 6
有没有太复杂的方法来做到这一点?我没有任何使用awk,sed等的经验。 感谢
答案 0 :(得分:8)
如果您只想将文件分组为X
列,则可以使用xargs -nX
:
$ xargs -n2 < file
1 1
2 2
3 3
4 4
5 5
6 6
要获得更多控制权并在第4个字段后打印空行,您还可以使用此awk:
$ awk 'BEGIN{FS=OFS="\t"} {for (i=1;i<=NF;i++) printf "%s%s", $i, (i%2?OFS:RS); print ""}' file
1 1
2 2
3 3
4 4
5 5
6 6
# <-- note there is an empty line here
BEGIN
块中重新定义它。答案 1 :(得分:6)
这可能是允许自定义的最简单方法
awk '{print $1,$2"\n"$3,$4}' file
对于
之间的一行awk '{print $1,$2"\n"$3,$4"\n"}' file
尽管如果不需要,fedorquis
回答xargs
可能是最简单的
正如Ed
所指出的,如果字段中有空格,这将无效,可以使用
awk 'BEGIN{FS=OFS="\t"} {print $1,$2 ORS $3,$4 ORS}' file
答案 2 :(得分:0)
通过perl,
perl -pe 's/\t(\d\t\d)$/\n$1\n/g' file
将上述命令的输出提供给sed命令以删除最后一个空行。
perl -pe 's/\t(\d\t\d)$/\n$1\n/g' file | sed '$d'