如何传递动态变量给awk的行为语句

发布于 2021-11-28 19:21:39 字数 761 浏览 904 评论 1

awk行为语句中如何得到外部变量,如某一文件总行数

尝试了如下的脚本

totallines=$(cat $1|wc -l)
echo $totallines
cat $1|awk '{print $totallines}'

执行该脚本

./awk_get_totallines.sh temp.txt
10
3
2
1
4
5
6
9
10
8
7

得到的是一串随机数字,似乎并未能正确识别到totallines这一shell变量.

问如何传递动态变量给awk的行为语句呢?

问题背景:

因为使用的tac来读取文件(从尾到头), 想在打印满足条件的行时同时打印行号

#其中11为总行数 总行数-NR = 正确的行号

$ tac temp.txt | awk '{if($0%2==0) print 11-NR,$0}'



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

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

发布评论

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

评论(1

小情绪 2021-12-01 04:20:33

可通过如下方式传递变量给awk行为语句

totallines=$(cat $1|wc -l)
tac $1|awk -v total="$totallines" '{print total+1-NR, $0}'

参考文档:

http://stackoverflow.com/questions/19075671/how-to-use-shell-variables-in-awk-script

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文