2

我确实有一个对我来说太难的问题,但相信它可以在 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
795091529 6

希望有人可以帮助我。

4

2 回答 2

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
于 2012-10-03T10:22:38.103 回答
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
于 2012-10-03T10:42:49.833 回答