所有成对的连续行共享一个字段,使用 awk

all pairs of consecutive lines sharing a field, using awk

我想处理一个多行、多字段的输入文件,以便我得到一个包含所有成对连续行的文件,前提是它们与字段 #1 具有相同的值。

也就是说,对于每一行,输出将包含该行本身 + 下一行,并且将忽略字段 #1 中具有不同值的行的组合。

最好用例子来解释。

鉴于此输入:

1 this
1 that
1 nye
2 more
2 sit

我想制作类似的东西:

1 this 1 that
1 that 1 nye
2 more 2 sit

到目前为止我得到了这个:

awk 'NR % 2 == 1 { i=[=12=] ; next } { print i,[=12=] } END { if ( NR % 2 == 1 ) { print i } }' input.txt

我的输出:

1 this 1 that
1 nye 2 more
2 sit

如您所见,我的代码对字段 #1 的值视而不见,而且(更重要的是)它省略了 "intermediate" 结果,如 1 that 1 nye (一旦完成一行,它跳转到下一对行)。

有什么想法吗?我的首选语言是 awk/gawk,但如果可以使用 unix bash 也可以。

提前致谢!

你可以使用这个 awk:

awk 'NR>1 && ( in a){print a[], [=10=]} {a[]=[=10=]}' file
1 this 1 that
1 that 1 nye
2 more 2 sit

您可以使用简单的命令来完成。假设您的输入文件是 "test.txt",内容为:

1 this
1 that
1 nye
2 more
2 sit

以下命令给出请求的输出:

sort -n test.txt > tmp1
(echo; cat tmp1) | paste tmp1 - | egrep '^([0-9])+ *[^ ]* *'

纯属娱乐

paste -d" " filename <(sed 1d filename) | awk '=='