awk替换特定列

时间:2017-05-01 19:54:46

标签: awk

我有以下一行:

pr: 10.00    20.00

我想用" 00.00"替换第三列同时保留线上的标签和空格。第一列和第二列之间有一个空格,第二列和第三列之间有一个标签。以下命令有效除了它在第一列和第二列之间插入一个选项卡:

awk' $ 1 ==" pr:" {OFS =" \ t&#34 ;; $ 3 =" 00.00"} 1' mydata.txt>出

如何保留原始行中出现的空格和标签?

谢谢!

3 个答案:

答案 0 :(得分:1)

简单 awk 方法:

awk -F'\t| ' '{$NF="00.00"}1' input

输出:

pr: 10.00    00.00

答案 1 :(得分:1)

要修复原始脚本,只需:

awk 'BEGIN{FS=OFS="\t"} $1~/^pr:/{$2="00.00"} 1' mydata.txt > out

答案 2 :(得分:0)

使用sub

$ awk '{sub(/20.00/,"00.00")}1' file
pr: 10.00    00.00

或者如果它是最后一个字段:

$ awk '{sub(/[^ \t]+$/,"00.00")}1' file
pr: 10.00    00.00

编辑:如果你正在使用GNU awk,split记录并存储分隔符:

$ awk '
{ 
    n=split($0,a,FS,seps)                     # save delim spaces to seps
    a[3]="00.00"                              # changes to a
    for(i=1;i<=n;i++)                         # loop to n
        printf "%s%s",a[i],(i==n?ORS:seps[i]) # print a and seps
}' file
pr: 10.00    00.00