Awk Printf列和固定值之间的减法结果
假设我有:Awk Printf列和固定值之间的减法结果,awk,printf,Awk,Printf,假设我有: David 1500 2338 Baker Danny 1290 1550 Bold Domminic 25 28 Baker 因此有4个选项卡分隔的列。所有列的大小可能会有很大差异。 我想要的是一个使用awk printf的解决方案:每行2-1美元。 以下是我想要的结果: David 1499 2338 Baker Danny 1289 1550 Bold Domminic
David 1500 2338 Baker
Danny 1290 1550 Bold
Domminic 25 28 Baker
因此有4个选项卡分隔的列。所有列的大小可能会有很大差异。
我想要的是一个使用awk printf的解决方案:每行2-1美元。
以下是我想要的结果:
David 1499 2338 Baker
Danny 1289 1550 Bold
Domminic 24 28 Baker
最后,这里是我到目前为止所做的:
awk '{if($0 ~/^D/) \
{printf ("%s\t%d\t%d\t%s\n",$1,($2 - 1),$3,$4)}}'
显然,如果我问这个问题,那是因为我没有得到预期的结果。这就是我得到的:
David 1500-1 2338 Baker
Danny 1290-1 1550 Bold
Domminic 25-1 28 Baker
我尝试了其他的东西,但效果并没有更好…用printf在awk中获得解决方案对我来说真的很重要。
“救救我,欧比-万·克诺比,你是我唯一的希望”
编辑:我在printf“格式”部分犯了一个小错误,最后一个\t应该是一个\n。
然后问题就解决了,我不明白为什么我以前会犯这个错误。非常感谢Ed的帮助(见评论)。awk命令现在正在工作 只需将输入和输出字段分隔符设置为Tab并将$2
值修改为
awk 'BEGIN{FS=OFS="\t"}{$2=$2-1}1' file
这里根本不需要printf
。设置字段分隔符后,可以通过$1
访问各个字段。$NF
。因为我们关心的值是2美元,所以只需从中减去1即可
默认的print
操作(由始终为真模式1
)将根据设置的输出字段分隔符(OFS
)从字段重建输出行。因为我们在这里只修改了
$2
,其他字段保持不变。只需将输入和输出字段分隔符设置为Tab并将$2
值修改为
awk 'BEGIN{FS=OFS="\t"}{$2=$2-1}1' file
这里根本不需要printf
。设置字段分隔符后,可以通过$1
访问各个字段。$NF
。因为我们关心的值是2美元,所以只需从中减去1即可
默认的print
操作(由始终为真模式1
)将根据设置的输出字段分隔符(OFS
)从字段重建输出行。因为我们在这里只修改了
$2
,所以其他字段保持不变。这里是另一个awk
$ awk '/^D/{$2--}1' file | column -t
David 1499 2338 Baker
Danny 1289 1550 Bold
Domminic 24 28 Baker
或者,为表格输入/输出添加
BEGIN{FS=OFS=“\t”}
。这里是另一个awk
$ awk '/^D/{$2--}1' file | column -t
David 1499 2338 Baker
Danny 1289 1550 Bold
Domminic 24 28 Baker
或者,为表格输入/输出添加
BEGIN{FS=OFS=“\t”}
。您可以尝试awk'{print$1,$2-1,$3,$4}'您的文件
无法从您说运行的命令中获得您说的输出。您的问题是如何显示为生成该输出而实际运行的命令,以及如何显示从该命令中实际获得的输出。我想,这样做会给你一个问题的答案。嗨,埃德,我确实犯了一个小错误:printf格式的结尾不是“\t”,而是“\n”。所以我要编辑它。也许,如果你在这次修改后没有得到好的结果,那是因为我只描述了我脚本中的awk部分,因为问题就出在那里。你是对的,我不明白,但我的awk命令现在起作用了!谢谢。您可以尝试awk'{print$1,$2-1,$3,$4}您的文件无法从您所说运行的命令中获取您所说的输出。您的问题是如何显示为生成该输出而实际运行的命令,以及如何显示从该命令中实际获得的输出。我想,这样做会给你一个问题的答案。嗨,埃德,我确实犯了一个小错误:printf格式的结尾不是“\t”,而是“\n”。所以我要编辑它。也许,如果你在这次修改后没有得到好的结果,那是因为我只描述了我脚本中的awk部分,因为问题就出在那里。你是对的,我不明白,但我的awk命令现在起作用了!谢谢。做得很好,不过值得注意的是,基于OFS
的输出行(重新)构造发生在分配给字段变量时(在本例中为$2
)$2-=1
或$2--
也可以。做得很好,不过值得注意的是,基于OFS
的输出行的(重新)构造发生在分配给字段变量时($2
)<代码>$2-=1
或$2--
也可以。