awk - 来自脚本参数的 AWK 列?
问题描述
我想从这样的 bash 脚本中调用 awk:
#!/bin/bash
awk -vFPAT='[^ ]*|"[^"]*"|\\[[^]]*\\]' '{ print $2 }' $1
我希望 $2 是我指定的数字。因此,如果脚本名为 get-log-column 我希望能够这样调用它:get-log-column /var/log/apache2/access.log 4
在此示例中,4 将是列,因此输出将是 access.log 中的第 4 列。
换句话说,如果 access.log 看起来像这样:
alpha beta orange apple snickers
paris john michael peace world
所以输出将是:
apple
peace
解决方案
请您尝试以下操作。
#!/bin/bash
var="$1"
awk -v FPAT='[^ ]*|"[^"]*"|\\[[^]]*\\]' -v varcol="$var" '{ print $varcol }' Input_file
解释:
已经创建了一个在var
其中具有$1
值的 shell 变量。其中$1
value 是传递给脚本的参数。现在awk
我们不能直接传递 shell 变量,所以创建了 1 个awk
名为的变量var_col
,其中的值是var
。现在提到$varcol
将根据 OP 的问题从当前行打印列值。$
表示字段编号,varcol
是一个变量,其中包含用户输入的值。
推荐阅读
- ruby-on-rails - 在 AWS ElasticBeanstalk 上部署 Ruby-on-Rails 时如何为 gem 提供凭证
- shell - 根据Unix中第二个记录替换第一个文件中的变量值
- facebook - 是否可以在 facebook messenger bot 中检索收件人的电子邮件地址?
- jquery - 在一种情况下,获取错误回调不是一个函数
- php - Yii2 Youtube Analytics 获取频道报告 - 获取所需的错误
- jenkins - Jenkins 中的 Java 10 代码部署失败(构建成功)
- java - 在 Maven 中使用类路径加载 bean 时遇到问题
- c# - 通过 ac# 程序在命令提示符下使用其 IP 地址关闭另一个系统?
- javascript - 单击打印按钮页面后重定向到另一个页面javascript
- java - 即使服务器停止,Clinet 也不会停止发送消息