如何找出两个文件并从第二个文件中删除公共条目

如何找出两个文件并从第二个文件中删除公共条目

我有一个主目录,它有多个子目录,其中包含许多具有相似名称和扩展名的文件。我想找出两个文件,然后从第二个文件中删除公共条目。

我尝试执行以下命令

awk 'NR==FNR{a[$1]++;next;}!($2 in a)' file1_comma_splited_newsort.txt file2_comma_splited_snp.txt >> output.txt 

上面的awk命令将文件 1 的第一列与文件 2 的第二列进行比较,从文件 2 的第二列中删除重复的条目。运行此命令后,我得到所需的输出。但我需要对子目录内的许多文件运行此命令。为此,我想使用 find 命令找出这两个文件并放在上面的awk命令中,可以吗?

考虑我的目录包含以下文件

main directory file1_comma_splited_newsort.txt 
sub-directory1 file2_comma_splited_snp.txt
sub-directory2 file3_comma_splited_snp.txt 
sub-directory3 file4_comma_splited_snp.txt
sub-directory4 file5_comma_splited_snp.txt
sub-directory5 file6_comma_splited_snp.txt
sub-directory6 file7_comma_splited_snp.txt
sub-directory7 file8_comma_splited_snp.txt
sub-directory8 file9_comma_splited_snp.txt

我需要将所有子目录文件与1st主目录文件的列进行比较,即file1_comma_splited_newsort.txt一一比较,以便我可以删除2nd所有子目录文件的列中存在的重复条目。

答案1

假设一棵树如下所示

main
|--maindata.txt
|--sub
   |--subdata1.txt
   |--subdata2.txt

并且您作为 cdw 位于 main 目录中,这可以通过bash脚本来完成(如果愿意,甚至可以作为单行脚本)。

#!/bin/bash
for file in sub/* ; do
    awk '{actions}' maindata.txt "$file" >> "$file"_differences
done

这将简单地迭代子目录中的所有文件,并创建一个包含子目录中每个文件的差异的文件。

相关内容