我有分号分隔的列,我想在特定列中添加一些字符。
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
添加字符但删除所有带空格的分号。
答案 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