我有一个主目录,它有多个子目录,其中包含许多具有相似名称和扩展名的文件。我想找出两个文件,然后从第二个文件中删除公共条目。
我尝试执行以下命令
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
这将简单地迭代子目录中的所有文件,并创建一个包含子目录中每个文件的差异的文件。