开发者社区> 问答> 正文

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

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}'



展开
收起
kun坤 2020-06-06 15:28:28 448 0
1 条回答
写回答
取消 提交回答
  • 可通过如下方式传递变量给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

    2020-06-06 15:28:34
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载