【问题标题】:How to pass filename through variable to be read it by awk如何通过变量传递文件名以供awk读取
【发布时间】:2014-04-21 15:23:54
【问题描述】:

早安,

我想知道如何将文件名作为变量传递给 awk,以便 awk 读取它。

到目前为止我已经完成了:

echo    file1   >  Aenumerar
echo    file2   >> Aenumerar
echo    file3   >> Aenumerar

AE=`grep -c '' Aenumerar`
r=1
while [ $r -le $AE ]; do
    lista=`awk "NR==$r {print $0}" Aenumerar`
    AEList=`grep -c '' $lista`
    s=1
    while [ $s -le $AEList ]; do
        word=`awk -v var=$s 'NR==var {print $1}' $lista`
        echo $word
    let "s = s + 1"
    done
let "r = r + 1"
done

非常感谢任何线索或其他使用 bash 命令行的简单方法

【问题讨论】:

    标签: bash shell awk


    【解决方案1】:

    代替:

    awk "NR==$r {print $0}" Aenumerar
    

    你需要使用:

    awk -v r="$r" 'NR==r' Aenumerar
    

    【讨论】:

    • +1:@Alejandro:阅读this了解更多详情。
    • 我很确定这两个命令是等价的(假设$r 实际上是一个有效的整数),除了$0 在调用AWK 之前被Bash 扩展的问题。你能解释一下为什么你认为它们不同吗?
    • 没错,$0 正在扩展中
    【解决方案2】:

    从您发布的内容来看,您实际上并不需要所有 NR 的东西;你可以用这个替换你的整个脚本:

    while IFS= read -r lista ; do
        awk '{print $1}' "$lista"
    done < Aenumerar
    

    (这将打印file1file2file3 中每一行的第一个字段。我认为这就是你想要做的?)

    【讨论】:

      猜你喜欢
      • 2020-03-28
      • 2013-10-10
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      相关资源
      最近更新 更多