awk替换特定列中的值

awk替换特定列中的值,awk,Awk,我有以下几行: pr: 10.00 20.00 我想用“00.00”替换第三列,同时保留行上的制表符和空格。第一列和第二列之间有空格,第二列和第三列之间有制表符。除在第一列和第二列之间插入选项卡外,以下命令有效: awk'$1==“pr:{OFS=“\t”$3=“00.00”}1'mydata.txt>out 如何保持空格和制表符显示在原始行中 谢谢 对其使用sub: $ awk '{sub(/20.00/,"00.00")}1' file pr: 10.00 00.00 或者如

我有以下几行:

pr: 10.00    20.00
我想用“00.00”替换第三列,同时保留行上的制表符和空格。第一列和第二列之间有空格,第二列和第三列之间有制表符。除在第一列和第二列之间插入选项卡外,以下命令有效:

awk'$1==“pr:{OFS=“\t”$3=“00.00”}1'mydata.txt>out

如何保持空格和制表符显示在原始行中


谢谢

对其使用
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,
拆分
记录并存储分隔符:

$ 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
$awk'
{ 
n=拆分($0,a,FS,seps)#将delim空间保存到seps
a[3]=“00.00”#更改为a

对于(i=1;i为其使用
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,
拆分
记录并存储分隔符:

$ 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
$awk'
{ 
n=拆分($0,a,FS,seps)#将delim空间保存到seps
a[3]=“00.00”#更改为a
对于(i=1;iSimpleawk方法:

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

pr: 10.00    00.00
简单的awk方法:

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

pr: 10.00    00.00

要修复原始脚本,只需执行以下操作:

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

要修复原始脚本,只需执行以下操作:

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

我可以保留列号吗?原因是$20.00的值有时会更改。我在一个文件中更改多行,并且我更新的不仅仅是一行。我可以保留列号吗?原因是$20.00的值有时会更改。我在一个文件中更改多行,而且我更新的不仅仅是一行ng.一点也没有想到这一点。++@JamesBrown,是的,这就是为什么我们喜欢AWK,因为他的简单和强大)
\t |
=
[\t]
甚至
[:blank:]
[:space:]
但在任何情况下,它的有效行为都与默认的
FS
相同,这将用空白字符替换所有制表符,OP明确表示他希望保留空格。根本没有想到这一点。++@JamesBrown,是的,这就是为什么我们喜欢AWK,因为它的简单性和强大)(
\t
=
[\t]
或甚至
[[:blank:][]
[:space:][]
但在任何情况下,它的有效行为都与默认的
FS
相同,这将用空白字符替换所有选项卡,OP明确表示希望保留空格。1)您的脚本甚至无法工作。提示:“单引号”.2)OP也想保留空间。这是怎么回事?1)删除了引号,2)OP说
第一列和第二列之间有一个空格,第二列和第三列之间有一个制表符。
所以OP在
pr:
和第一个数字之间有一个空格,然后在两对数字之间有一个制表符-这就是我的脚本将输出的内容。如果他愿意,我不会阻止他这么做。我不知道你是从哪里来的。谢谢Ed-从没想过我可以用一行脚本解决这个问题!谢谢大家帮助我完成我的第一个awk脚本。1)你的脚本甚至不起作用。提示:“单引号”.2)OP也想保留空间。这是怎么回事?1)删除了引号,2)OP说
第一列和第二列之间有一个空格,第二列和第三列之间有一个制表符。
所以OP在
pr:
和第一个数字之间有一个空格,然后在两对数字之间有一个制表符-这就是我的脚本将输出的内容。如果他愿意,我不会阻止他这么做。我不知道你是从哪里来的。谢谢Ed-从没想过我可以用一行脚本解决这个问题!谢谢大家帮助我完成我的第一个awk脚本。