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
我在 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