用于将值添加到特定列的Shell脚本

时间:2017-02-03 04:56:15

标签: shell awk

我有分号分隔的列,我想在特定列中添加一些字符。

aaa;111;bbb
ccc;222;ddd
eee;333;fff

到我要添加的第二列' @',所以输出应该是;

aaa;@111;bbb
ccc;@222;ddd
eee;@333;fff

我试过

awk -F';' -OFS=';' '{ $2 = "@" $2}1' file

添加字符但删除所有带空格的分号。

3 个答案:

答案 0 :(得分:1)

您可以使用sed来完成工作:

# replaces just the first occurrence of ';', note the absence of `g` that 
# would have made it a global replacement
sed 's/;/;@/' file > file.out

或者,到位:

sed -i 's/;/;@/' file

或者,使用awk

awk -F';' '{$2 = "@"$2}1' OFS=';' file

以上所有命令都会为您的示例文件生成相同的输出:

aaa;@111;bbb
ccc;@222;ddd
eee;@333;fff

答案 1 :(得分:1)

@atb:试试: 第一:

awk -F";" '{print $1 FS "@" $2 FS $3}'  Input_file

只有当您的Input_file只有3个字段时,上面才有效。

第二

awk -F";" -vfield=2 '{$field="@"$field} 1' OFS=";"   Input_file

以上代码,您可以输入任何字段编号,并可根据您的要求制作。 在这里,我将字段分隔符设为";"然后取一个变量命名字段,其中包含字段编号,然后连接" @"在它的值和1是使条件为TRUE而不是制作和动作所以默认情况下打印动作将发生在当前行。

答案 2 :(得分:1)

你只是误解了如何设置变量。将-OFS更改为-v OFS

awk -F';' -v OFS=';' '{ $2 = "@" $2 }1' file

但实际上你应该同时将它们设置为相同的值:

awk 'BEGIN{FS=OFS=";"} { $2 = "@" $2 }1' file