bash - 找到两个文件 bash 的不匹配行

标签 bash

我还是 bash 的新手,我发现了与我类似的问题,但我仍然无法解决我的问题。我有两个文件,每个文件有 2 列,用空格分隔。

文件 1:

1 AGCATTTTTCAAACGAAAGATTTACTACCGATGTGT  
2 TGCTCACCAACAAAAACAGGCGTCTCAGCAGCAGCA  
3 GATCGAACCGGCTGCCTACTGCGTGTAAAGCCGCCC  
4 CCGACACAGAGAACATTAGAATACTCAGAGCCATNN   
5 TAAGCCTGAGCCTAAACCTAAGCCTAAACATAAGAA  
6 AGCAGAGAAGAGATGAGTTGTCGAGTGAGGCGTAAG  
7 AACGTTGAAAAATTATCCCGTCAACAGTCTCCAGAA  
8 GCCAGAGAGTAAAATATTGGGTGAAGCCAGAGAGTA  
9 TGCTCACCAACAAAAACAGGCGTCTCAGCAGCAGCA  

文件 2:

1 AGCATTTTTCAAACGAAAGATTTACTACCGATGTGT  
2 TGCTCACCAACAAAAACAGGCGTCTCAGCAGCAGCA  
3 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN  
4 CCGACACAGAGAACATTAGAATACTCAGAGCCATNN  
5 TAAGCCTGAGCCTAAACCTAAGCCTAAACATAAGAA  
6 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN  
7 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN  
8 GCCAGAGAGTAAAATATTGGGTGAAGCCAGAGAGTA  
9 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

我只想逐行比较每个文件的第二列,然后输出只有不匹配行的第三个文件。

输出:

3 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
6 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
7 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
9 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

最佳答案

你可以使用awk:

awk 'NR==FNR{a[$2];next} !($2 in a)' file1 file2
3 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
6 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
7 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
9 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

解释:

NR == FNR {                  # While processing the first file
  a[$2]                      # just push the second field in an array
  next                       # move to next record of first file
}
!($2 in a)                   # print lines from file2 if array a doesn't that line

关于bash - 找到两个文件 bash 的不匹配行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29354431/

相关文章:

linux - Wav 到 mp3 bash 脚本

bash - 如何使用正则表达式(bash)为变量赋值?

bash - 从 shell 脚本运行 Golang 脚本

linux - 如何删除第二列中的值出现特定次数的文件的行?

linux - Raspberry Pi bash 脚本无法运行

bash - 如何在 bash for 循环中设置变量?

bash - 关闭已执行命令的返回消息

linux - 如何在 linux 脚本中用两位数字表示十六进制数 (bash)

bash - 如何显示某列的总和?

bash - 如何在 bash 中快速杀死 java 进程?