我有一个文件如下:
ENSG00000087266:I10_35 chr4:2815905-2816105 + I B
ENSG00000087266:I10_35 chr4:2815905-2816105 + I U
ENSG00000087266:I10_36 chr4:2815955-2816155 + I B
ENSG00000087266:I10_36 chr4:2815955-2816155 + I U
ENSG00000087266:I16_18 chr4:2826151-2826351 + I B
ENSG00000087266:I3_27 chr4:2797290-2797490 + I B
ENSG00000087266:I3_28 chr4:2797340-2797540 + I B
ENSG00000087266:I3_28 chr4:2797340-2797540 + I U
ENSG00000087266:I3_29 chr4:2797390-2797590 + I B
ENSG00000087266:I3_30 chr4:2797440-2797640 + I B
ENSG00000087266:I3_30 chr4:2797440-2797640 + I U
ENSG00000087266:I3_31 chr4:2797490-2797690 + I B
ENSG00000087266:I3_38 chr4:2797840-2798040 + I B
ENSG00000000003:E1_1 chrX:99894942-99895142 - E U
ENSG00000000003:E2_10 chrX:99891638-99891838 - E U
ENSG00000000003:E2_11 chrX:99891688-99891888 - E U
ENSG00000000003:E2_12 chrX:99891738-99891938 - E U
ENSG00000000003:E2_13 chrX:99891788-99891988 - E U
ENSG00000000003:E2_14 chrX:99891838-99892038 - E U
ENSG00000000003:E2_15 chrX:99891888-99892088 - E U
ENSG00000000003:E2_16 chrX:99891938-99892138 - E U
ENSG00000000003:E2_1 chrX:99891188-99891388 - E U
ENSG00000000003:E2_2 chrX:99891238-99891438 - E U
我想删除第5列中包含“U”的所有重复列,以便文件
ENSG00000087266:I10_35 chr4:2815905-2816105 + I B
ENSG00000087266:I10_36 chr4:2815955-2816155 + I B
ENSG00000087266:I16_18 chr4:2826151-2826351 + I B
ENSG00000087266:I3_27 chr4:2797290-2797490 + I B
ENSG00000087266:I3_28 chr4:2797340-2797540 + I B
ENSG00000087266:I3_29 chr4:2797390-2797590 + I B
ENSG00000087266:I3_30 chr4:2797440-2797640 + I B
ENSG00000087266:I3_31 chr4:2797490-2797690 + I B
ENSG00000087266:I3_38 chr4:2797840-2798040 + I B
ENSG00000000003:E1_1 chrX:99894942-99895142 - E U
ENSG00000000003:E2_10 chrX:99891638-99891838 - E U
ENSG00000000003:E2_11 chrX:99891688-99891888 - E U
ENSG00000000003:E2_12 chrX:99891738-99891938 - E U
ENSG00000000003:E2_13 chrX:99891788-99891988 - E U
ENSG00000000003:E2_14 chrX:99891838-99892038 - E U
ENSG00000000003:E2_15 chrX:99891888-99892088 - E U
ENSG00000000003:E2_16 chrX:99891938-99892138 - E U
ENSG00000000003:E2_1 chrX:99891188-99891388 - E U
ENSG00000000003:E2_2 chrX:99891238-99891438 - E U
简而言之,如果除了最后一列之外的所有列的行都是重复的,请保留以'B'结尾的行并删除以'U'结尾的副本
到目前为止,我已尝试使用
while read id; do sed -i '/"$id"/{/U/d}' file_that_contains_duplicates.txt; done < list_of_duplicate_ids.txt
没有输出任何东西; 目前我正在运行
while read id; do awk -v id=$id '$1!=id && $5!="U"' file_that_contains_duplicates.txt; done < list_of_duplicate_ids.txt | sort -u which somehow works but outputs repeated lines and also takes some time.
答案 0 :(得分:1)
$ awk '!(seen[$1,$2,$3,$4]++ && ($5 == "U"))' file
ENSG00000087266:I10_35 chr4:2815905-2816105 + I B
ENSG00000087266:I10_36 chr4:2815955-2816155 + I B
ENSG00000087266:I16_18 chr4:2826151-2826351 + I B
ENSG00000087266:I3_27 chr4:2797290-2797490 + I B
ENSG00000087266:I3_28 chr4:2797340-2797540 + I B
ENSG00000087266:I3_29 chr4:2797390-2797590 + I B
ENSG00000087266:I3_30 chr4:2797440-2797640 + I B
ENSG00000087266:I3_31 chr4:2797490-2797690 + I B
ENSG00000087266:I3_38 chr4:2797840-2798040 + I B
ENSG00000000003:E1_1 chrX:99894942-99895142 - E U
ENSG00000000003:E2_10 chrX:99891638-99891838 - E U
ENSG00000000003:E2_11 chrX:99891688-99891888 - E U
ENSG00000000003:E2_12 chrX:99891738-99891938 - E U
ENSG00000000003:E2_13 chrX:99891788-99891988 - E U
ENSG00000000003:E2_14 chrX:99891838-99892038 - E U
ENSG00000000003:E2_15 chrX:99891888-99892088 - E U
ENSG00000000003:E2_16 chrX:99891938-99892138 - E U
ENSG00000000003:E2_1 chrX:99891188-99891388 - E U
ENSG00000000003:E2_2 chrX:99891238-99891438 - E U
答案 1 :(得分:0)
在这种情况下,我不知道“重复”是什么意思,因为你只是删除所有以“D”结尾的行。那是easily done:
sed '/U$/d'
(匹配以“U”结尾的行,然后 d elete。)
如果您只想要以“B”结尾的行:
sed -n '/B$/p'
(匹配以“B”结尾的行,然后 p rint。)