需要一些有关bash的专家建议

问题描述 投票:0回答:2

我有一个两行的文件

123|456|789
abc|123|891

-我基本上需要这样的输出,我想将字符串“ xyz”添加到col 1并将xyz设为col2

xyz-123|xyz|456|789
xyz-abc|xyz|123|891

这是我使用的

awk 'BEGIN{FS=OFS="fs-"$1}{print value OFS $0}' /tmp/b.log

我得到

xyz-123|456|789
xyz-abc|123|891

我尝试过

awk 'BEGIN{FS=OFS="fs-"$1}{print value OFS $0}' /tmp/b.log|awk -F" " '{$2="fs" $0;}1' OFS=" "

但没有得到我需要的东西,您能帮忙吗?

awk
2个回答
0
投票

您能不能尝试以下操作。

awk 'BEGIN{FS=OFS="|"} {$1="xyz-"$1;$2="xyz" FS $2} 1' Input_file

或按照@Corentin Limier的评论尝试:

awk 'BEGIN{FS=OFS="|"} {$1="xyz-" $1 FS "xyz"} 1' Input_file

输出如下。

xyz-123|xyz|456|789
xyz-abc|xyz|123|891

0
投票

我将使用sed代替awk如下:

sed -e 's/^/xyz-/' -e 's/\|/\1xyz\|' Input_file

这在每行的开头加上xyz-,并将第一个|更改为|xyz|


0
投票

除了awk的更新字段($ 1,$ 2 ...)方法之外,我们还可以使用替换来完成工作:

 sed 's/^[^|]*/xyz-&|xyz/' file

如果必须使用awk:

awk '1+sub(/^[^|]*/, "xyz-&|xyz")' file

单线都给出预期的输出。

© www.soinside.com 2019 - 2024. All rights reserved.