在shell中对比两个文件的列差异

9 浏览
0 Comments

在shell中对比两个文件的列差异

我想做一件非常简单的事情。我有两个文件如下:\n

文件1:
A s1 p1
B s2 p2
C s3 p3
文件2:
B s4 p4
A s1 p1
C s6 p6

\n我想从这两个文件中提取第一列和第三列,并打印出文件的差异。一个简单的方法是使用cut -f1,3创建两个文件的中间文件,然后进行diff。这正是我想要的输出。但是我不想创建中间文件。有没有简单的一行命令可以做到这一点。\n还有一件事,这两个文件都没有排序,所以无法直接使用join命令。

0
0 Comments

使用进程替代

diff -y <( awk '{print $1,$3}' file1) <( awk '{print $1,$3}' file2 )

应该可以解决这个问题。注意,带有-y选项的diff是用于并排输出。

原因:

该问题的出现是因为需要对两个文件的列进行比较,找出差异之处。

解决方法:

通过使用awk命令从文件中提取所需的列,然后使用diff命令比较两个文件的差异。其中,<()是进程替代语法,用于将awk的输出作为diff命令的输入。

具体实现方法如下所示:

diff -y <( awk '{print $1,$3}' file1) <( awk '{print $1,$3}' file2 )

这段代码将提取文件file1file2中的第一列和第三列,并使用diff -y命令将它们进行并排比较。

通过使用进程替代和diff命令的-y选项,可以方便地比较两个文件的列差异。

0
0 Comments

问题的出现原因是需要比较两个文件的某些列,并生成它们之间的差异。解决方法是使用shell命令diff和cut,通过将文件的指定列提取出来,然后比较这些列的差异。

我们可以使用以下命令来解决这个问题:

diff <(cut -f1,3 file1) <(cut -f1,3 file2)

这个命令使用了process substitution(进程替代)的方法,将cut命令的输出作为diff命令的输入。cut命令用于提取文件的指定列,-f参数用于指定要提取的列数。

此外,还需要指定分隔符。可以通过添加-d参数并指定分隔符来完成,例如:

diff <(cut -d " " -f1,3 file1.txt) <(cut -d " " -f1,3 file2)

参考文献:

- [Compare two files line by line and generate the difference in another file](https://stackoverflow.com/questions/4544709)

以上就是解决“diff on columns of two files in shell”问题的方法。通过使用shell命令diff和cut,我们可以提取文件的指定列,并比较它们之间的差异。这是一个简单而有效的方法,可以帮助我们解决文件比较和差异分析的问题。

0