[英]Regex replace on specific column with SED/AWK
我的數據看起來像這樣(TAB分隔):
Organ K ClustNo Analysis
LN K200 C12 Gene Ontology
LN K200 C116 Gene Ontology
CN K200 C2 Gene Ontology
我想要做的是刪除第3列上每一行的C
,除了標題行:
Organ K ClustNo Analysis
LN K200 12 Gene Ontology
LN K200 116 Gene Ontology
CN K200 2 Gene Ontology
這不會,因為它會影響其他列和標題行:
sed 's/C//'
什么是正確的方法呢?
awk
是一個很好的工具:
$ awk -F'\t' -v OFS='\t' 'NR>=2{sub(/^C/, "", $3)} 1' file
Organ K ClustNo Analysis
LN K200 12 Gene Ontology
LN K200 116 Gene Ontology
CN K200 2 Gene Ontology
-F'\\t'
使用tab作為輸入的字段分隔符。
-v OFS='\\t'
使用tab作為輸出上的字段分隔符
NR>=2 {sub(/^C/, "", $3)}
僅從第一行之后的行中刪除字段3中的初始C
1
這是awk用於打印線的神秘簡寫。
$ sed -r '2,$ s/(([^\t]+\t+){2})C/\1/' file
Organ K ClustNo Analysis
LN K200 12 Gene Ontology
LN K200 116 Gene Ontology
CN K200 2 Gene Ontology
-r
使用擴展正則表達式。 (在Mac OSX或其他BSD平台上,請改用-E
。)
2,$ s/(([^\\t]+\\t){2})C/\\1/
此替換僅適用於從2到文件末尾的行。
(([^\\t]+\\t){2})
匹配前兩個以制表符分隔的列。 這假設只有一個選項卡分隔每列。 因為正則表達式包含在parens中,所以它匹配的內容稍后將以\\1
。
C
這匹配C
\\1
只用前兩列替換匹配的文本,而不是C
..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.