仅复制具有唯一内容

时间:2016-06-06 11:45:04

标签: bash unique copying

我正在尝试过滤数据,并且只想复制只有1个特定组代表的文件。例如,该文件可能如下所示:

  

sample_AAAAA_9824_r1   GGAAGCATCGTGGGAACTGCTTCACTAAGAAGGAAGTCACAGTTACTTCATAGATATCCATCACTAAAYGTGAGTAGATTGTGTTAATGTGTTATATATGACTGAAAAATTTTGCCTGGATCAGAATACGAAACCTTCTTGAGATATTGTAATGAATTTCAGTCATATGAGAAGTGATGGAGGGGGTGTGAATACATATACTGTGTCATTATCCATGCAGTATkATACTRCAAAGTTC -----   sample_AACCC_12358_r1   GGAAGCATCGTGGGAACTGCTTCACTAAGAAGGAAGTCACAGTTACTTCATAGATATCCATCACTAAATGTGAGTAGATTGTGTTAATGTGTTATATATGACTGAAAAWTTTTGCCTGGATCAGAATACGAAACCTTCTTGAGATATTGTAATGAATTTCAGTCATATGAGAAGTGATGGAGGGGGTGTGAATACATATACTGTGTCATTATCCATGCAGTATTATACTGCAAAGTTC -----   sample_AATTT_3905_r1   GGAAGCATCGTGGGAACTGCTTCACTAAGAAGGAAGTCACAGTTACTTCATAGATATCCATCACTAAATGTGAGTAGATTGTGTTAATGTGTTATATATGACTGAAAAATTTTGCCTGGATCAGAATACGAAACCTTCTTGAGATATTTTCAGTCATATGAGAATTGATGGAGGGGGTGTGAATACATATACTGTGTCATTATCCATGCAGTATGATACTACAAAGTTCCTTCCCATA -----   sample_ACGTA_178_r1   GGAAGCATCGTAGGAACTGCTTCACTAAGAAGGAAGTCACAGTTACTTCATAGATATCCATCACTAAATGTGAGTAGATTGTGTTAATGTGTTATATATGACTGAAAATTTTTGCCTGGATCAGAATACGAAACCTTCTTGAGATATTGTAATGAATTTCAGTCATATGAGAAGCGATGGAGGGGGTGTGAATACATATACTGTGTCATTATCCATGCAGTATGATACTACAAAGTTC -----   sample_ACTGC_9933_r1   GGAAGCATCGTRGGAACTGCTTCACTAAGAAGGAAGTCACAGTTACTTCATAGATATCCATCACTAAATGTGAGTAGATTGTGTTAATGTGTTATATATGACTGAAAAwTTTTGCCTGGATCAGAATACGAAACCTTCTTGAGATATTGTAATGAATTTCAGTCATATGAGAAGYGATGGAGGGGGTGTGAATACATATACTGTGTCATTATCCATGCAGTATGATACTACAAAGTTC -----

我有大约36000个这些文件,并且只希望将这些文件复制到每个样本只有一个条目的不同文件夹中(1个样本例如是样本ACTGC)。有26个样本“数字”,由5个字母组成(例如AAAAA,AATTTT,ACGTC,......),以下数字与“r1”无关。

我一直在寻找不同的bash脚本,但找不到我需要的确切内容。我可以计算文件中每个样本的出现次数,但这可能不是可行的方法......

非常感谢任何帮助, 的Yannick

1 个答案:

答案 0 :(得分:0)

您可以使用循环来根据cmp的输出与sort的输出使用sort | uniq进行比较:

for f in files/*
do if cmp -s <(grep sample ${f} | cut -d'_' -f2 | sort) <(grep sample ${f} | cut -d'_' -f2 | sort | uniq)
then
    echo "copying file ${f} here..."
    # ... copy
else
    "not copying file ${f} here" # do nothing...!
fi
done