awk直到某一行

时间:2018-04-10 07:19:36

标签: shell awk diff

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

文件1:

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

文件2:

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

Sofar我有这个:

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

由于我不知道群组中有多少个主机,因此我无法使用确切的数字,只能使用模式。 diff按要求向我显示了150行,两者之间的变化用"!"突出显示。

使用上面的命令,我得到了小组的开头:

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

但它停在第一个换行符处。我想让整个小组包括标有“'!' (这将是改变本身)。

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

1 个答案:

答案 0 :(得分:1)

你刚刚从每个输入文件中显示了一行,而不是向我们显示2个输入文件,这些文件有一些常见的和一些不同的行以及相关的预期输出,所以你没有给我们任何可以测试的东西,但是可能是这样的(当然未经测试)是您正在寻找的:

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

按记录顺序进行比较:

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