【问题标题】:Unable to pass shell variables into awk [duplicate]无法将 shell 变量传递到 awk [重复]
【发布时间】:2016-09-17 22:40:19
【问题描述】:

我正在尝试获取数字序列之间的数据,例如:

100000000
1 2 3 4
5 6 7 8
....
100001000
....
200000000

我使用awk匹配模式,不使用变量也能成功使用,例如:

awk '/10000000 /{flag=1;next}/10001000/{exit}flag' input.dat

但是,当我尝试在此命令中使用 shell 变量时,它没有任何输出:

for i in {1..4}
do
    step1=$(($i*10000000))
    step2=$(($step1+1000))
    awk -v arg1="$step1" -v arg2="$step2" '/arg1 /{flag=1;next}/arg2 /{exit}flag' input.dat

done

我有什么明显的遗漏吗?

【问题讨论】:

    标签: bash shell variables awk


    【解决方案1】:

    正则表达式文字/.../ 不允许使用变量。您可以使用~ 运算符在正则表达式中与变量进行正则表达式匹配:

     awk -v arg1="$step1" -v arg2="$step2" '$0 ~ arg1 " "{flag=1; next}
          $0 ~ arg2{exit} flag' input.dat 
    

    【讨论】:

    • 非常感谢您的回答,效果很好。但是,我对 awk 很陌生,请问$0 ~ arg1 " " 是做什么的?
    • 这是正则表达式与变量arg1 的比较,最后有一个空格,因为您有问题/10000000 /。
    猜你喜欢
    • 2012-04-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多