如何在 Linux 中使用带有参数的 awk 别名?

How to use an alias of awk with a parameter in Linux?

我正在尝试创建 awk 的别名以从一行中剪掉重要的列。 例如:

$date | awk -F' ' '{print }'              
Wed

但我想创建一个带有列数参数的 awk 别名,例如打印 $1、打印 $2 等。

我试着在互联网上搜索并找到了这个:

alias kaat="_kaat"              
_kaat() {                  
    awk -F ' ' '{print var}' var=""                 
}      

但这仍然不起作用,没有给我任何输出。

var 将打印该变量的内容,而 $var 将打印基于 var 值的字段内容。您可以在 () 中使用任何表达式,例如:$(var+1)

alias kaat="_kaat"              
_kaat() {                  
    awk -F ' ' '{print $var}' var=""                 
}

样本运行

$ echo 'foo baz 123' | kaat 2
baz
$ echo 'foo baz 123' | kaat 1
foo

您可以 simplify/improve 您的功能,如评论中所述:

kaat() {
    awk -v var="" '{print $var}'
}

# single line version, note the ;
kaat() { awk -v var="" '{print $var}' ; }


您也可以在此处使用 cut(注意:这并不完全等同,请参阅 awk field splitting summary

$ alias k='cut -d" " -f'
$ echo 'foo baz 123' | k 1
foo
$ echo 'foo baz 123' | k 2
baz