我必须处理一个数据组织如下的文件
AAAAA:BB:CCC:EEEE:DDDD
FF:III:JJJ:KK:LLL
MMMM:NN:OOO:PP
etc
列可以有不同的长度,但行始终具有相同的列数。
我希望能够剪切给定行的特定列,并将其更改为我想要的值。
例如,我将应用我的命令并将文件更改为
AAAAA:BB:XXXX:EEEE:DDDD
FF:III:JJJ:KK:LLL
MMMM:NN:OOO:PP
我知道如何使用sed选择特定的行,然后剪切该字段,但是我不知道如何用我拥有的值替换该字段。
谢谢
发布于 2012-11-27 16:49:42
这里有一种使用awk
实现的方法
在你的例子中,如果你想替换第一行的第三个字段:
awk 'BEGIN{FS=OFS=":"} {if (NR==1) {$3 = "XXXX"}; print}' input_file
输入:
AAAAA:BB:CCC:EEEE:DDDD
FF:III:JJJ:KK:LLL
MMMM:NN:OOO:PP
输出:
AAAAA:BB:XXXX:EEEE:DDDD
FF:III:JJJ:KK:LLL
MMMM:NN:OOO:PP
说明:
awk
:调用awk command'...'
:所有用单引号括起来的东西都是awkBEGIN{FS=OFS=":"}
:的指令,使用:
作为输入和输出的分隔符。FS
代表字段分隔符。OFS
代表输出字段Separator.if (NR==1) {$3 = "XXXX"};
:如果到目前为止读取的记录数(NR
)是1,则将第三个字段($3
)设置为"XXXX
".print
:打印输入文件的当前lineinput_file
:名称。相反,如果您尝试实现的是简单地将文件中所有出现的CCC
替换为XXXX
,则只需执行以下操作:
sed -i 's/CCC/XXXX/g` input_file
请注意,这也将替换部分匹配,如ABCCCDD
-> ABXXXXDD
发布于 2012-11-27 16:58:25
这可能适用于您(GNU sed):
sed -r 's/^(([^:]*:?){2})CCC/\1XXXX/' file
或
awk -F: -vOFS=: '$3=="CCC"{$3="XXXX"};1' file
https://stackoverflow.com/questions/13588949
复制相似问题