【发布时间】:2017-05-09 16:57:46
【问题描述】:
假设我有:
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 中获得解决方案非常重要。 “帮帮我,obi wan kenobi,你是我唯一的希望”!
编辑:我在 printf“格式”部分犯了一个小错误,最后一个 \t 应该是一个 \n 。 然后问题就解决了我不明白为什么我之前会收到这个错误。非常感谢 Ed 的帮助(见评论)。 awk 命令现在正在工作。
【问题讨论】:
-
你可以试试
awk '{print $1, $2-1, $3, $4}' yourfile -
不可能从你说你运行的命令中得到你说你做的输出。 edit您的问题是显示您真正运行以产生该输出的命令,并显示您真正从该命令获得的输出。我怀疑,这样做会告诉你问题的答案。
-
嗨,Ed,我确实犯了一个小错误:printf 格式的结尾不是 "\t" 而是 "\n" 。所以我要编辑它。也许如果你在这个修改之后没有得到好的结果,那是因为我只描述了我的脚本的 awk 部分,因为问题来自那里。你说得对,我不明白,但我的 awk 命令现在正在工作!谢谢。