更改文本文件的格式

Oni*_*uka 1 unix linux bash awk text-processing

我有一个文件,其中包含多行标签分隔数据,格式如下:

1 1 2 2
3 3 4 4
5 5 6 6
...
Run Code Online (Sandbox Code Playgroud)

我想将格式更改为:

1 1
2 2

3 3
4 4

5 5
6 6
Run Code Online (Sandbox Code Playgroud)

有没有太复杂的方法来做到这一点?我没有任何使用awk,sed等的经验.谢谢

fed*_*qui 8

如果您只想将文件分组为X列,则可以使用xargs -nX:

$ xargs -n2 < file
1 1
2 2
3 3
4 4
5 5
6 6
Run Code Online (Sandbox Code Playgroud)

要获得更多控制并在第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
Run Code Online (Sandbox Code Playgroud)

说明

  • 在奇数字段上,它在它之后打印FS.
  • 在偶数字段上,打印RS.
  • 注意FS表示字段分隔符,默认为空格,RS表示记录分隔符,默认为新行.由于您有tab作为字段分隔符,我们在BEGIN块中重新定义它.


小智 6

这可能是允许自定义的最简单方法

awk '{print $1,$2"\n"$3,$4}' file
Run Code Online (Sandbox Code Playgroud)

对于之间的界限

awk '{print $1,$2"\n"$3,$4"\n"}' file
Run Code Online (Sandbox Code Playgroud)

虽然如果不需要,fedorquis答案xargs可能是最简单的

正如所Ed指出的那样,如果字段中有空白,这将无法解决,这可以通过使用来解决

awk 'BEGIN{FS=OFS="\t"} {print $1,$2 ORS $3,$4 ORS}' file
Run Code Online (Sandbox Code Playgroud)