当前位置: 首页 > 编程笔记 >

awk 使用-v选项将参数传递给程序

宣瀚
2023-03-14
本文向大家介绍awk 使用-v选项将参数传递给程序,包括了awk 使用-v选项将参数传递给程序的使用技巧和注意事项,需要的朋友参考一下

示例

该选项-v后再加上变量= value形式的赋值可用于将参数传递给awk程序。下面的惩罚程序对此进行了说明,该程序的作用是写计数乘以句子“我不会在课堂上讲话”。在标准输出上。以下示例使用值100,该值在教师中非常流行:

awk -v count=100 'BEGIN {
  for(i = 1; i <= count; ++i) {
    print("我不会在课堂上讲话。")
  }
  exit
}'

可以重复使用-v标志来传递多个参数:

awk -v count=100 -v "sentence=我不会在课堂上讲话。" 'BEGIN {
  for(i = 1; i <= count; ++i) {
    print(sentence)
  }
  exit
}'

没有对数组或列表参数的内置支持,这些必须手动处理。通过列表参数一个经典的方法是使用一个分隔符来连接列表中,流行的选择是:,|或者,。然后,split函数允许将列表恢复为awk数组:

awk -v 'serialised_list=a:b:c:d:e:f' 'BEGIN {
  list_sz = split(serialised_list, list, ":")
  for(i = 1; i <= list_sz; ++i) {
    printf("list: %d: %s\n", i, list[i])
  }
  exit
}'

这个awk程序的输出是

list: 1: a
list: 2: b
list: 3: c
list: 4: d
list: 5: e
list: 6: f

有时,将列表项恢复为awk数组的键更为方便,因为这样可以轻松进行成员身份验证。例如,下面的程序打印第一行不属于固定例外列表的每一行:

awk -v 'serialised_exception_list=apple:pear:cherry' 'BEGIN {
  _list_sz = split(serialised_exception_list, _list, ":")
  for(i = 1; i <= _list_sz; ++i) {
    exception[_list[i]]
  }
}

! ($1 in exception) { print }' <<EOF
apple Apples are yummy, I like them.
pineapple Do you like pineapple?
EOF

该程序的输出是

pineapple Do you like pineapple?

作为最后一个示例,我们显示如何将惩罚程序包装到shell脚本中,因为这说明了shell脚本如何将参数传递给辅助awk脚本:

#!/bin/sh

usage()
{
   cat <<EOF
Usage: punishment [-c COUNT][-s SENTENCE]
 Prepare your punishments for you
EOF
}

punishment_count='100'
punishment_sentence='我不会在课堂上讲话。'
while getopts "c:hs:" OPTION; do
  case "${OPTION}" in
    c) punishment_count="${OPTARG}";;
    s) punishment_sentence="${OPTARG}";;
    h) usage; exit 0;;
    *) usage; exit 64;;
  esac
done

awk -v "count=${punishment_count}" -v "sentence=${punishment_sentence}" 'BEGIN {
  for(i = 1; i <= count; ++i) {
    print(sentence)
  }
  exit
}'
           

 类似资料:
  • 本文向大家介绍C#程序将参数传递给线程,包括了C#程序将参数传递给线程的使用技巧和注意事项,需要的朋友参考一下 要使用线程,请在代码中添加以下命名空间- 首先,您需要在C#中创建一个新线程- 上面,threadDemo是我们的线程函数。 现在将参数传递给线程- 上面设置的参数是- 示例 让我们看完整的代码,以将参数传递给C#中的线程。 输出结果

  • 我正在用Raku做实验,试图弄明白如何用子命令编写程序。当我运行时,: 我得到

  • 问题内容: 我正在使用pm2启动我的应用程序,但无法将参数传递给它。我正在使用的命令是pm2 start app.js-dev。尽管这永远有效。 问题答案: 您可以按照此票证所述进行操作:https : //github.com/Unitech/pm2/issues/13 尽管如果通过环境,则可能需要考虑利用环境变量。使用此工具,您可以创建一个变量,该环境中的任何进程都可以访问该变量。 因此,您有

  • 问题内容: 我正在使用Go内置的http服务器,并拍拍来响应一些URL: 我需要向该处理函数传递一个额外的参数-一个接口。 如何向处理程序函数发送额外的参数? 问题答案: 通过使用闭包,您应该能够做您想做的事情。 更改为以下内容(未测试): 然后对

  • 我在解一个有很多常数的非线性方程 我创建了一个用于解决以下问题的函数: 然后我想做: 但是正在解包并向函数传递太多参数,因此我得到: TypeError:terminalV()正好接受2个参数(给定6个) 那么,我的问题是,我是否可以通过某种方式将元组传递给调用的函数?

  • 问题内容: 我正在尝试禁用Chrome控制台的输出。如果我通过–start-maximized选项,则可以正常工作。我可能输入了错误的命令? 我也试过 输出量 已启动的ChromeDriver端口= 26703版本= 23.0.1240.0日志= / Brett / workspace / TestNG / chromedriver.log [1214/161331:ERROR:ipc_sync_