0
我想之前和之後不同的分隔符,除去文字,僅在特定的列3列AWK子在指定列
第一分隔符是分號,二是逗號。它們也存在於未顯示的列中。
輸入數據:
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
正確,並且只是爲了完整性,因爲根據他/她的樣本數據它可能無關緊要 - 上面的代碼將移除到最後一個分號和第一個逗號,而'gsub(/^[^;] *; | ,[^,] * $ /,「」,$ 3)'會將第一個分號和最後一個逗號移除。此外,爲了保留空白空間,OP可以在整個記錄上運行而不是一個字段'sub(/ [^ [:space:]] +; /,「」);子(/ [^ [:空間:]] +/「」)'。 –
@謝謝,已更新,包括您的建議,並添加一個保留空間的討厭sed選項。 –
@EdMorton @TomFenech感謝您的幫助。我用'awk'{gsub(/^.*; |,。* $ /,「」,$ 3)來測試} 1' b',因爲輸入文件實際上是製表符分隔的。 '(sed -E's/^(([^] + +){2})[^;] +;([^,] +)(,[^] +)*/\ 1 \ 3 /''a > b沒有改變任何東西,即使用\ t替換空格。 – Sarah