我确实遇到了一个对我来说太难的问题,但相信它可以很容易地在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
希望有人能帮助我。
答案 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