I have a large file with different types of entries, separated by tabs:
## 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
I want to print everything but change the $3 value to "CANON_DUPL" in those entries meeting these conditions:
- NOT starting with #.
- $3 value must be "CANON".
- $1 value must be duplicated.
So the final table must be:
## 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
I tried it using awk but I only got to meet the two first conditions:
> 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
I don't know if solutions out from awk are easier to implement.
Any thoughts?
Note: Edited to reflect better the file structure.