2017-06-14 78 views
2

在下面給出的數據(這是製表符分隔):如何使用awk來分割特定的列(使用分隔符),然後添加後綴然後合併?

# data 
1 xyz alfa x=abc;z=cbe;d=fed xt 
2 xyz alfa y=cde;z=xy ft 
3 xyb delta xy=def zf 

欲在;分割後在第4列的元素(變量值)添加後綴_LT

輸出,如:

1 xyz alfa x=abc_LT;z=cbe_LT;d=fed_LT xt 
2 xyz alfa y=cde_LT;z=xy_LT ft 

我能夠在特定的列添加後綴,但不能分割(在DELIM)-add合併。

awk -v PRE='_LT' '{$4=$4PRE; print}' OFS="\t" data.txt > data_LT.txt 
+0

它應該只替換那些有';'的值嗎? – RomanPerekhrest

回答

3

可以使用split function,循環和合並......或使用替代

$ awk -v PRE='_LT' '{gsub(/;/,PRE";",$4); sub(/$/,PRE,$4); print}' OFS='\t' data.txt 
1 xyz alfa x=abc_LT;z=cbe_LT;d=fed_LT xt 
2 xyz alfa y=cde_LT;z=xy_LT ft 
3 xyb delta xy=def_LT zf 
  • gsub(/;/,PRE";",$4)_LT;全部更換;只對第4列
  • sub(/$/,PRE,$4)追加_LT到第4列
+1

'gsub'和'sub'的很好用法。 :) – CWLiu

1

另一個想法是在awk使用split()

awk -v PRE='_LT' '{ 
    n=split($4,a,/;/); 
    b=""; 
    for(i in a){ b=b a[i] PRE; if(i!=n){b=b";"} } 
    {$4=b; print $0} 
}' OFS='\t' data.txt 

n=split($4,a,/;/)分裂$ 4中,採用分離器 ';'。並根據需要打印分割結果。

相關問題