awk - 组合行变量&打印为列

时间:2012-10-03 10:15:52

标签: awk

我确实遇到了一个对我来说太难的问题,但相信它可以很容易地在awk中解决 我的数据如下:

  

8377885 8384365 8385357 8385877 @ 8378246 8384786 8385450 8386102
  66999065 66999928 67091529 @ 66999090 67000051 67091593

不同的线条恰好在它们的中间有'@'。我想:
1.从第一个到最后一个用'@'分隔的组合线元素;
2.将所有组合元素打印为列 首选输出如下:

  

8377885 8378246
  8384365 8384786
  8385357 8385450
  8385877 8386102
  8390268 8390996
  66999065 66999090
  66999928 67000051
  67091529 67091593

希望有人能帮助我。

2 个答案:

答案 0 :(得分:5)

在这里你有一个单行:

awk 'BEGIN { FS = "[@ ]+" } { for (i=1;i<=NF/2;i++) { printf "%s %s\n", $i, $(NF/2+i) } }' infile

产量:

8377885 8378246
8384365 8384786
8385357 8385450
8385877 8386102
66999065 66999090
66999928 67000051
67091529 67091593

答案 1 :(得分:4)

下面的

将起作用:

awk -F"@" '{n=split($1,a," ");split($2,b," ");for(i=1;i<=n;i++)print a[i],b[i]}' your_file

测试如下:

> awk -F"@" '{n=split($1,a," ");split($2,b," ");for(i=1;i<=n;i++)print a[i],b[i]}' temp
8377885 8378246
8384365 8384786
8385357 8385450
8385877 8386102
66999065 66999090
66999928 67000051
67091529 67091593
相关问题