AWK一半行到新列

时间:2013-11-07 17:17:09

标签: awk grep

我运行此命令:

awk '/diameter/ {f=NR} f && f+3==NR {a=a?a$0:$0} f && f+4==NR {b=b?b$0:$0} END {print a"\n"b}' file > output

输出(我想要更改的文件):

5 um  
1406 849  
1105 1333  
619 1932  
1885 124  
571 374  
145 644  
1487 1793  
64 255 0 0  
1364 882  
1082 1369  
580 1953  
1886 124  
536 392  
126 659  
1488 1793  

但我希望它看起来像这样(一半行移到第2列)。

1406 849    1364 882  
1105 1333   1082 1369  
619 1932    580 1953  
1885 124    1886 124  
571 374 536 392  
145 644 126 659  
1487 1793   1488 1793  

一列应包含两个数字。我还想删除“5 um 64 255 0 0

2 个答案:

答案 0 :(得分:1)

pr是你做朋友的朋友:

(忽略标题column1 column2):

pr -2t -s' ' file|grep -v '[^0-9 \t]'

用你的例子测试:

kent$  cat f
5 um
1406 849
1105 1333
619 1932
1885 124
571 374
145 644
1487 1793
64 255 0 0
1364 882
1082 1369
580 1953
1886 124
536 392
126 659
1488 1793

kent$  pr -2t -s' '  f|grep -v '[^0-9 \t]'
1406 849 1364 882
1105 1333 1082 1369
619 1932 580 1953
1885 124 1886 124
571 374 536 392
145 644 126 659
1487 1793 1488 1793

答案 1 :(得分:0)

这样的事情应该算法(bash代码,假设你的输入在file.txt):

(( nlines = $(wc -l < file.txt) / 2 ))
split -l ${nlines} -d -a 1 file.txt foo
paste foo0 foo1 > output.txt
rm foo0 foo1