Linux 使用bash检查具有文件路径的文本文件中的文件名在文本文件中是否唯一

Linux 使用bash检查具有文件路径的文本文件中的文件名在文本文件中是否唯一,linux,bash,unix,awk,Linux,Bash,Unix,Awk,我有一个带有filepath的文本文件.tsv和一个带有filesize的列,如下所示,我希望确保文件名是唯一的 ./statistics/variant_calls/v12_HG03486_hgsvc_pbsq2-ccs_1000.snv.QUAL10.GQ100.vcf.cluster.stats 676 ./statistics/variant_calls/v12_HG03486_hgsvc_pbsq2-ccs_1000.snv.QUAL10.GQ100.vcf.stats 788 .

我有一个带有filepath的文本文件.tsv和一个带有filesize的列,如下所示,我希望确保文件名是唯一的

./statistics/variant_calls/v12_HG03486_hgsvc_pbsq2-ccs_1000.snv.QUAL10.GQ100.vcf.cluster.stats  676
./statistics/variant_calls/v12_HG03486_hgsvc_pbsq2-ccs_1000.snv.QUAL10.GQ100.vcf.stats  788
./v12_config_20200721-092246_HG02818_HG03125_HG03486.json  887
./v12_config_20200721-092246_HG02818_HG03125_HG03486.json  887
./variant_calls/v12_HG02818_hgsvc_pbsq2-ccs_1000.wh-phased.vcf.bgz  566
./variant_calls/v12_HG02818_hgsvc_pbsq2-ccs_1000.wh-phased.vcf.bgz  566
./variant_calls/v12_HG02818_hgsvc_pbsq2-ccs_1000.wh-phased.vcf.bgz.tbi  772
预期产量 是所有唯一的文件名

我的计划 我将从文件中提取第一列

awk -F"\t" '{print $1}' supplied.tsv > supplied_firstcolumn.txt
提取文件名,然后检查不同的行。请让我知道如何有效地做到这一点。

awk'{fil[$1]++}{END{for(i in fil){if(fil[i]>1){print i“-”fil[i];dup++}}if(dup<1){print“No replices”}files.txt
awk '{ fil[$1]++ } END { for (i in fil) { if (fil[i]>1) { print i" - "fil[i];dup++ } } if (dup < 1) { print "No duplicates" } }' files.txt
创建一个名为fil的数组,将文件名作为索引,并在每次看到文件时递增该值。最后,循环fil数组,如果值大于1,则打印文件名和计数。同时增加重复计数(dup)。如果循环结束时dup变量小于1,请打印“无重复项”

如何有效地执行此操作

由于您对if感兴趣,而不是您有多少个副本,我建议在点击第一个副本后停止处理。我会按照下面的方法做。让
file.txt
内容为:

./statistics/variant_calls/v12_HG03486_hgsvc_pbsq2-ccs_1000.snv.QUAL10.GQ100.vcf.cluster.stats  676
./statistics/variant_calls/v12_HG03486_hgsvc_pbsq2-ccs_1000.snv.QUAL10.GQ100.vcf.stats  788
./v12_config_20200721-092246_HG02818_HG03125_HG03486.json  887
./v12_config_20200721-092246_HG02818_HG03125_HG03486.json  887
./variant_calls/v12_HG02818_hgsvc_pbsq2-ccs_1000.wh-phased.vcf.bgz  566
./variant_calls/v12_HG02818_hgsvc_pbsq2-ccs_1000.wh-phased.vcf.bgz  566
./variant_calls/v12_HG02818_hgsvc_pbsq2-ccs_1000.wh-phased.vcf.bgz.tbi  772
然后

输出

found nonunique
说明:首先,我将
uniq
设置为
1
,如果没有找到重复项,它将保持不变。然后,对于每一行,我增加给定路径(
$1
)的
arr
中的计数器,并检查在该操作之后它是否大于或等于2-如果是这意味着它是第二次或之后发生的,所以我将
uniq
设置为
0
,并使用结束处理文件-或者换言之,跳到
end
。在
END
I
print
pending on
uniq
value中,如果您希望仅在未找到副本时打印,则可以在
END
中使用
if(uniq){print“unique”}


(在gawk 4.2.1中测试)

管道至
sort | uniq-d
。这将显示所有重复的名称。或者使用
awk'!查看[$1]+'文件
预期输出是否为“是”?如果输入中存在重复项,甚至连重复字符串的名称和/或其所在的行号都不需要输出?
found nonunique