【发布时间】:2016-03-22 11:42:52
【问题描述】:
我正在尝试删除不同分隔符前后的文本,仅在特定列中,第 3 列。
第一个分隔符是分号,第二个是逗号。它们也存在于未显示的列中。
输入数据:
chr2L 54273 2L_54273_SNP;rs203207895 A G 999 PASS ALTCOUNT=118;DB;REFCOUNT=69 GT ./. ./. 0/0
chr2L 54339 2L_54339_SNP;rs206877787,rs80377533 T A 999 PASS ALTCOUNT=114;DB;REFCOUNT=73 GT ./. ./.
chr2L 54587 2L_54587_SNP;rs203534836 A G 999 PASS ALTCOUNT=5;DB;REFCOUNT=199 GT 0/0 0/0 0/0
需要的输出:
chr2L 54273 rs203207895 A G 999 PASS ALTCOUNT=118;DB;REFCOUNT=69 GT ./. ./. 0/0
chr2L 54339 rs206877787 T A 999 PASS ALTCOUNT=114;DB;REFCOUNT=73 GT ./. ./.
chr2L 54587 rs203534836 A G 999 PASS ALTCOUNT=5;DB;REFCOUNT=199 GT 0/0 0/0 0/0
我的工作重点是仅删除分号之前(包括)之前的文本,但没有显着效果:
awk '{ if ($3 == ".*\;//") {$3 = ""; print} else { print }; }' < a > b
sed 's/.*;//' a > b
awk '{ sub(/*.;/,"",$3) }1 ' < a > b
awk '{sub(;/./*,""); print}' < a > b
【问题讨论】:
标签: bash awk substitution