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脚本。