awk 初学者关于将一些命令放入 abc.awk 等程序文件中的问题

发布于 2024-10-28 05:23:31 字数 422 浏览 2 评论 0原文

我需要写这个来计算 NR= 0-500, 500-1000,1000-1500 等之间的行,直到最后,并且从 1 开始。

awk "{NR<=500 && "/^1/" && sum+=1}; END {print sum}"  1.txt
awk "{NR>500 && NR<=1000 && "/^1/" && sum+=1}; END {print sum}"  1.txt
awk "{NR>1000 && NR<=1500 && "/^1/" && sum+=1}; END {print sum}"  1.txt
.....

这是我的问题,我如何将它们放入文件中(* .awk)同时运行..

i need to write this for counting lines between NR= 0-500, 500-1000,1000-1500 etc. till the end, and which start with 1.

awk "{NR<=500 && "/^1/" && sum+=1}; END {print sum}"  1.txt
awk "{NR>500 && NR<=1000 && "/^1/" && sum+=1}; END {print sum}"  1.txt
awk "{NR>1000 && NR<=1500 && "/^1/" && sum+=1}; END {print sum}"  1.txt
.....

here is my question, how can i put these in to a file(*.awk) to run at the same time..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不疑不惑不回忆 2024-11-04 05:23:31

您可以尝试将这些命令放入一个文件中,例如 myscript.awk,

NR<=500 && /^1/ { sum1 += 1 }
NR>500 && NR<=1000 && /^1/ { sum2 += 1}
NR>1000 && NR<=1500 && /^1/ { sum3+=1 }
END { print sum1,sum2.sum3 } 

然后在命令行上运行,

awk -f myscript.awk 1.txt

您不需要在同一个文件上调用 awk 3 次!这是低效编码的一个例子。

仅当您想像 ./myscript.awk 那样运行脚本时,才可以在脚本的第一行中使用 shebang #!/usr/bin/awk -f,否则,你可以忽略它

you can try put these commands in a file eg myscript.awk

NR<=500 && /^1/ { sum1 += 1 }
NR>500 && NR<=1000 && /^1/ { sum2 += 1}
NR>1000 && NR<=1500 && /^1/ { sum3+=1 }
END { print sum1,sum2.sum3 } 

then run on command line

awk -f myscript.awk 1.txt

you do not need to call awk on the same file 3 times! Its an example of inefficient coding.

you can out a shebang #!/usr/bin/awk -f in the first line of your script only if you want to run it like ./myscript.awk, otherwise , you can leave it out

埋葬我深情 2024-11-04 05:23:31

如果您希望脚本是纯 awk,则需要带有 -f 的 shebang 行。将此行设为文件之一:(

#!/usr/bin/awk -f

或根据要使用的 awk 的位置进行调整)

该方法的一大缺点是您必须在脚本中硬编码 awk 的路径。该问题的典型解决方案(使用 /usr/bin/env)不适用于 awk 或 sed,因为它们需要 shebang 中的 -f。如果您只想在 awk 周围使用 shell 脚本包装器,您可以执行以下操作:

#!/bin/sh

file=${1-1.txt}
awk "{NR<=500 && "/^1/" && sum+=1}; END {print sum}"  $file
awk "{NR>500 && NR<=1000 && "/^1/" && sum+=1}; END {print sum}"  $file
awk "{NR>1000 && NR<=1500 && "/^1/" && sum+=1}; END {print sum}"  $file

If you want the script to be pure awk, you need a shebang line with a -f. Make this line one of the file:

#!/usr/bin/awk -f

(or adjust according to the location of the awk you want to use)

One big drawback of that approach is that you must hard code the path of awk in the script. The typical solution to that problem (to use /usr/bin/env) does not work with awk or sed, because they require the -f in the shebang. If you just want to use a shell script wrapper around your awk, you can do something like:

#!/bin/sh

file=${1-1.txt}
awk "{NR<=500 && "/^1/" && sum+=1}; END {print sum}"  $file
awk "{NR>500 && NR<=1000 && "/^1/" && sum+=1}; END {print sum}"  $file
awk "{NR>1000 && NR<=1500 && "/^1/" && sum+=1}; END {print sum}"  $file

心的憧憬 2024-11-04 05:23:31

未经测试,但这应该替换所有这些重复的行:

awk '/^1/ {sum++} NR % 500 == 0 {print sum; sum=0} END {print sum}' 1.txt

Untested, but this should replace all those duplicated lines:

awk '/^1/ {sum++} NR % 500 == 0 {print sum; sum=0} END {print sum}' 1.txt
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文