在下面给出的数据中(以制表符分隔):
# 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
我希望在_LT
分割后,在第4列的元素(变量值)中添加后缀;
。
输出如:
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-merge。
awk -v PRE='_LT' '{$4=$4PRE; print}' OFS="\t" data.txt > data_LT.txt
答案 0 :(得分: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;
sub(/$/,PRE,$4)
将_LT
添加到第4列答案 1 :(得分:1)
另一个想法是在split()
中使用awk
,
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。并根据需要打印拆分结果。
答案 2 :(得分:0)
使用Perl
$ cat everestial
1 xyz alfa x=abc;z=cbe;d=fed xt
2 xyz alfa y=cde;z=xy ft
3 xyb delta xy=def zf
$ perl -F'/\s+/' -lane ' $F[3]=~s/(.+?)=(.+?)\b/${1}=${2}_LT/g; print join("\t",@F) ' everestial
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