如何过滤“ diff”命令以排除某些条目?

时间:2019-09-18 17:34:02

标签: linux shell diff

我必须听取教授给我的一些文字,将其放入两个文件中,并且必须使用“ diff”功能比较这两个文件。但是,这些文件中的某些行缺少第六(最后)列中的条目。我需要过滤diff命令以排除这些行。

我试图将diff命令与正则表达式一起使用,但我无法制作能够过滤最后一列的正则表达式。

我要过滤的文件如下所示:

b72cc000-b72ce000 rw-p 00147000 fc:00 3671434    /usr/lib/i386-linux-gnu/libX11.so.6.3.0
b72ce000-b72d0000 rw-p 00000000 00:00 0 
b72d0000-b72d7000 r-xp 00000000 fc:00 7606808    /lib/i386-linux-gnu/librt-2.23.so
b72d7000-b72d8000 r--p 00006000 fc:00 7606808    /lib/i386-linux-gnu/librt-2.23.so
b72d8000-b72d9000 rw-p 00007000 fc:00 7606808    /lib/i386-linux-gnu/librt-2.23.so
b72d9000-b72f2000 r-xp 00000000 fc:00 7602217    /lib/i386-linux-gnu/libpthread-2.23.so
b72f2000-b72f3000 r--p 00018000 fc:00 7602217    /lib/i386-linux-gnu/libpthread-2.23.so
b72f3000-b72f4000 rw-p 00019000 fc:00 7602217    /lib/i386-linux-gnu/libpthread-2.23.so
b72f4000-b72f6000 rw-p 00000000 00:00 0 
b72f6000-b72f9000 r-xp 00000000 fc:00 7602261    /lib/i386-linux-gnu/libdl-2.23.so
b72f9000-b72fa000 r--p 00002000 fc:00 7602261    /lib/i386-linux-gnu/libdl-2.23.so

我需要在两个类似Linux虚拟机中的文件上运行diff命令。 diff应该过滤掉第二行和第9行,因为最后一列没有任何内容。我在计算机上没有安装特权,因此无法安装任何新东西。预先安装了vim编辑器和C编译器;但是,我可以使用它们。

1 个答案:

答案 0 :(得分:1)

使用awk并按字段数过滤。

awk 'NF > 5' filename

将仅打印至少包含6个字段的行。

您可以将diff与它一起使用,以进行进程替换:

diff <(awk 'NF > 5' file1.txt) <(awk 'NF > 5' file2.txt)