Text-Processing
如果特定列中的單詞與表達式不匹配,如何替換它?
我有以下文件:
chr1 157784 157887 U6 0 - chr1 564813 564881 miRNA 0 + chr1 564879 564950 tRNA 0 - chr1 564952 565019 tRNA 0 + chr1 566062 566129 piRNA 0 + chr1 566137 566205 tRNA 0 -
如果第 4 列中的表達詞不是以“piRNA”或“miRNA”開頭,則替換為“rfam”
預期輸出:
chr1 157784 157887 rfam 0 - chr1 564813 564881 miRNA 0 + chr1 564879 564950 rfam 0 - chr1 564952 565019 fram 0 + chr1 566062 566129 piRNA 0 + chr1 566137 566205 rfam 0 -
注意:欄位 4 中會有很多不同的名稱,而不僅僅是 U6 和 tRNA。這需要適用於任何不是 piRNA 或 miRNA 的詞。
awk -v OFS='\t' '$4 !~ /^[pm]iRNA/ { $4 = "rfam" } ; { $4 = $4 ; print }' file
這完全符合您的要求 - 如果欄位 4 與 regexp 不匹配
^[pm]iRNA
,請將其設置為rfam
. 然後列印該行是否已更改。注意:我已將輸出欄位分隔符 (OFS) 設置為選項卡以確保輸出一致,並
$4 = $4
在列印語句之前添加(其副作用是導致輸出行中的欄位分隔符更改為 OFS) -否則,已更改的行將使用 OFS 作為預設值(單個空格),而未更改的行將與原始文件中的內容保持一致,這可能會導致在終端中使用cat
或查看時列無法正確對齊任何。