以下简单的 bash 脚本打印行号(来自文件 - list.txt)
function get_row
{
[[ $1 = 1 ]] && awk '{print $1}' list.txt
[[ $1 = 2 ]] && awk '{print $2}' list.txt
}
get_row 1
get_row 2
Run Code Online (Sandbox Code Playgroud)
但我想写得更优雅...
是否可以将“$1”设置为变量 awk '{print $val}'
所以如果我将函数调用为 get_row 1 那么 $val 将获得值 1
你想要这样的东西吗?
function get_column
{
awk -v val=$1 '{print $val}' list.txt
}
Run Code Online (Sandbox Code Playgroud)
以上是$1
通过传递给函数返回列匹配。如果您确实需要$1
从函数中打印与行号匹配的行,请改用下面的。
function get_row
{
awk -v val=$1 'NR==val{print ; exit}' list.txt
}
Run Code Online (Sandbox Code Playgroud)
或者让 shell 评估并设置val
值并打印awk
如下:
function get_column
{
awk '{print $val}' val=$1 list.txt
}
Run Code Online (Sandbox Code Playgroud)
function get_row
{
awk 'NR==val{print ; exit}' val=$1 list.txt
}
Run Code Online (Sandbox Code Playgroud)
在这里,你是路过val
,只有数字和是否val
为包含反斜杠转义字符,你会遇到一个问题,这awk
的确C转义序列处理上通过传递的值-v val=
和一个shell变量与val="\\n"
将变为值与\n
由AWK。
您可以使用:
field=$1 awk '{print $ENVIRON["field"]}'
Run Code Online (Sandbox Code Playgroud)
它适用于所有POSIX兼容系统,使用时不必担心代码注入 -v val=
此外,该函数应命名get_column
为get_row
.
归档时间: |
|
查看次数: |
27193 次 |
最近记录: |