在shell中的两个文件的列上的diff

Shw*_*eta 6 linux bash shell diff file

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

FILE 1:
A s1 p1
B s2 p2
C s3 p3

FILE2:
B s4 p4
A s1 p1
C s6 p6
Run Code Online (Sandbox Code Playgroud)

我想从该文件的文件和打印差异中提取第一列和第三列.一种简单的方法是使用cut -f1,3创建两个文件的中间文件并执行diff.多数民众赞成我想要的输出是什么.但我不想创建中间文件.任何简单的衬垫都可以做到这一点.

还有一件事,两个文件都没有排序,因此无法直接使用join.

xea*_*its 7

试试这个:

diff <(cut -f1,3 file1) <(cut -f1,3 file2)
Run Code Online (Sandbox Code Playgroud)

参考文献:

逐行比较两个文件并在另一个文件中生成差异

  • 是的,它被称为bash中的进程替换,正如sjsam发布的那样; 在fish shell中你使用`psub`:`diff(cut -f1,3 file1 | psub)(cut -f1,3 file2 | psub)`(你还没有`>(...)` (2认同)

sjs*_*sam 4

使用[进程替换]

diff -y <( awk '{print $1,$3}' file1) <( awk '{print $1,$3}' file2 )
Run Code Online (Sandbox Code Playgroud)

应该这样做。注意-y带有 is 的选项diff用于并排 o/p。