awk 直到某一行

awk until a certain line

我在 unix 中有两个文件,我需要它们之间的区别。足够简单的差异就可以了。 但是我还需要被编辑的部分的名字,也就是组的名字。

文件 1:

GROUPNAME = {"hostnames","morehostnames","alotreally",
"almost200","hosts","separated"
,"ingroupsof3"};

文件 2:

GROUPNAME = {"hostnames","morehostnames","alotreally",
"almost200","hosts","separated"
! ,"ingroupsof3","addedthis"};

到目前为止我有这个:

diff -C 150 file1 file2 | awk '/= {/,/!/p' >> diff.txt

因为我不知道一个组中有多少主机,所以我不能使用确切的数字,只能使用模式。 diff 按要求显示了 150 行,两者之间的变化用“!”突出显示。

使用上面的命令我得到了组的开始:

GROUPNAME = {"hostnames","morehostnames","alotreally",

但它在第一个换行处停止。我想让整个组包括标有“!”的行(这将是变化本身)。

我试过 sed,给了我大致相同的结果。 提前致谢!

您只显示了每个输入文件的一行,而不是向我们显示了 2 个输入文件,这些文件具有一些共同的和一些不同的行以及相关的预期输出,因此您没有给我们任何要测试的内容,但可能是这样的(当然未经测试)是您要找的:

awk -v RS=';' 'NR==FNR{a[[=10=]]; next} !([=10=] in a)' file1 file2

按记录顺序比较:

awk -v RS=';' 'NR==FNR{a[NR]=[=11=]; next} [=11=] != a[FNR]' file1 file2