2017-06-14 313 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中,采用分离器 ';'。并根据需要打印分割结果。

相关问题