類似于要求特定條件為真的 Bash 替換字串,我想根據先前的條件替換行的一部分,但我的分隔符必須不同,因為我要替換的部分內容包括 /。條件也不在第一列中,而是在第二列中。
例如我的資料包括:
Location Ref Alt GT1 GT2
1_100004338 T C 0/0 0/0
1_100004339 C T 0/0 0/1
1_100004343 A G 1/1 0/0
如果我想根據我在 Ref(第 2 列)中是否有 C 并將所有出現的 0/0 替換為 2:
Location Ref Alt GT1 GT2
1_100004338 T C 0/0 0/0
1_100004339 C T 2 0/1
1_100004343 A G 1/1 0/0
我嘗試了以下輸入
sed " ^"C" s "0/0" "2" g" file
并得到錯誤
sed: -e expression #1, char 2: unknown command: `^'
我不確定它是否會給我我想要的東西,如果它有效,盡管 C 位于第二列而不是行的開頭。我曾嘗試使用其他方法,例如 awk BEGIN,這是一種減慢檔案大小的方法。
任何幫助將不勝感激,并提前致謝。
uj5u.com熱心網友回復:
這可能對您有用(GNU sed ):
sed '/^\S\ C /s#0/0#2#g' file
如果第二列是C替換所有出現的0/0用2。
或者,如果您更喜歡:
sed -E '/^\S \s C\s /s#0/0#2#g' file
uj5u.com熱心網友回復:
awk 會更適合這個。
$ awk '$2=="C" {$4=2}1' input_file
Location Ref Alt GT1 GT2
1_100004338 T C 0/0 0/0
1_100004339 C T 2 0/1
1_100004343 A G 1/1 0/0
如果第$22 列字串是 C,則第$44 列等于 2。
如果sed是必須的,你可以試試這個。
$ sed '/[^ ]* C [A-Z]/ {s|0/0|2|}' input_file
Location Ref Alt GT1 GT2
1_100004338 T C 0/0 0/0
1_100004339 C T 2 0/1
1_100004343 A G 1/1 0/0
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/365315.html
