【发布时间】:2021-05-12 10:36:59
【问题描述】:
我有一个包含不同类型条目的大文件,由制表符分隔:
## HEADER 1
## HEADER 2
## HEADER 3
#Col1 Col2 Col3
1_222_A/G value1 ISO
1_222_A/G value1 ISO
1_222_A/G value1 ISO
1_222_A/G value1 CANON
1_506_C/T value2 ISO
1_506_C/T value2 CANON
1_245_A/T value3 SINGLE
2_1156_C/G value4 ISO
2_1156_C/G value4 ISO
2_1221_A/T/C value5 ISO
2_1221_A/T/C value5 ISO
2_1221_A/T/C value5 CANON
2_1221_A/T/C value5 CANON
3_787_G/T value6 ISO
3_99089_A/C value7 ISO
3_99089_A/C value7 ISO
3_99089_A/C value7 CANON
4_12_T/C value8 SINGLE
4_167_A/G value9 ISO
4_167_A/G value9 CANON
4_167_A/G value9 CANON
我想打印所有内容,但将满足这些条件的条目中的 $3 值更改为“CANON_DUPL”:
- 不以#开头。
- $3 的值必须是“CANON”。
- $1 值必须重复。
所以决赛桌一定是:
## HEADER 1
## HEADER 2
## HEADER 3
#Col1 Col2 Col3
1_222_A/G value1 ISO
1_222_A/G value1 ISO
1_222_A/G value1 ISO
1_222_A/G value1 CANON
1_506_C/T value2 ISO
1_506_C/T value2 CANON
1_245_A/T value3 SINGLE
2_1156_C/G value4 ISO
2_1156_C/G value4 ISO
2_1221_A/T/C value5 ISO
2_1221_A/T/C value5 ISO
2_1221_A/T/C value5 CANON_DUPL
2_1221_A/T/C value5 CANON_DUPL
3_787_G/T value6 ISO
3_99089_A/C value7 ISO
3_99089_A/C value7 ISO
3_99089_A/C value7 CANON
4_12_T/C value8 SINGLE
4_167_A/G value9 ISO
4_167_A/G value9 CANON_DUPL
4_167_A/G value9 CANON_DUPL
我使用 awk 进行了尝试,但我只需要满足前两个条件:
> awk 'BEGIN {FS=OFS="\t"}; !/#/$3~"CANON"{$3="CANON_DUPL"} {print $0}' file.txt
## HEADER 1
## HEADER 2
## HEADER 3
#Col1 Col2 Col3
1_222_A/G value1 ISO
1_222_A/G value1 ISO
1_222_A/G value1 ISO
1_222_A/G value1 CANON_DUPL #should not be modified
1_506_C/T value2 ISO
1_506_C/T value2 CANON_DUPL #should not be modified
1_245_A/T value3 SINGLE
2_1156_C/G value4 ISO
2_1156_C/G value4 ISO
2_1221_A/T/C value5 ISO
2_1221_A/T/C value5 ISO
2_1221_A/T/C value5 CANON_DUPL
2_1221_A/T/C value5 CANON_DUPL
3_787_G/T value6 ISO
3_99089_A/C value7 ISO
3_99089_A/C value7 ISO
3_99089_A/C value7 CANON_DUPL #should not be modified
4_12_T/C value8 SINGLE
4_167_A/G value9 ISO
4_167_A/G value9 CANON_DUPL
4_167_A/G value9 CANON_DUPL
我不知道 awk 中的解决方案是否更易于实施。
有什么想法吗?
注意:经过编辑以更好地反映文件结构。
【问题讨论】:
标签: awk duplicates