【问题标题】:awk use a command line variableawk 使用命令行变量
【发布时间】:2011-10-16 05:51:45
【问题描述】:

awk -F, -f awkfile.awk -v mysearch="search term"

我正在尝试从终端使用上述命令,并在 awk 程序中使用 search 作为搜索词。我的awk 程序运行得非常好,实际上在程序内部分配了搜索词,但我想知道如何使用变量搜索?

它用于if($j ~ /mysearch/){ 的行示例,这不适用于设置搜索词,但实际上是搜索字符串mysearch

【问题讨论】:

    标签: variables command-line awk


    【解决方案1】:

    只需删除斜线:​​

    $j ~ mysearch
    

    【讨论】:

      【解决方案2】:

      这并不理想,但我建议编写一个 bash 脚本,它接收搜索词,在 awk 脚本中替换该搜索词,然后运行该脚本。例如:

      $ cat dosearch.sh
      sed "s/XXX/$1/" awktemplate.awk > awkfile.awk
      awk -f awkfile.awk data.txt
      
      $ cat awktemplate.awk
      {
          j = 1
          if ($j ~ /XXX/) {
              # Do something, such as
              print "Found:", $0
          }
      }
      
      $ cat data.txt
      foo here
      bar there
      xyz everywhere
      
      $ ./dosearch.sh foo
      Found: foo here
      
      $ ./dosearch.sh bar
      Found: bar there
      

      在上面的示例中,awk 模板包含“XXX”作为搜索词,bash 脚本用第一个参数替换该搜索词,然后在修改后的脚本上调用 awk。

      【讨论】:

        【解决方案3】:
        $ cat input
        tinky-winky
        dipsy
        laa-laa
        noo-noo
        po
        
        $ teletubby='po'
        
        $ awk -v "regexp=$teletubby" '$0 ~ regexp' input
        po
        

        注意 anything 可以进入 shell 变量, 甚至是成熟的正则表达式,例如^d.*y。只要确保使用单引号 以防止外壳进行任何扩展。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-03-28
          • 2012-12-12
          • 2016-01-14
          • 2012-10-06
          • 1970-01-01
          • 1970-01-01
          • 2014-04-29
          • 1970-01-01
          相关资源
          最近更新 更多