首页 > 解决方案 > 来自脚本参数的 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

标签: awk

解决方案


请您尝试以下操作。

#!/bin/bash
var="$1"
awk -v FPAT='[^ ]*|"[^"]*"|\\[[^]]*\\]' -v varcol="$var" '{ print $varcol }' Input_file

解释:

已经创建了一个在var其中具有$1值的 shell 变量。其中$1value 是传递给脚本的参数。现在awk我们不能直接传递 shell 变量,所以创建了 1 个awk名为的变量var_col,其中的值是var。现在提到$varcol将根据 OP 的问题从当前行打印列值。$表示字段编号,varcol是一个变量,其中包含用户输入的值。


推荐阅读