gpt4 book ai didi

shell - AWK如何初始化具有多个要打印的字段的变量

转载 作者:行者123 更新时间:2023-12-02 15:32:37 24 4
gpt4 key购买 nike

我正在编写一个 SHELL 脚本,它将根据用户从 .sh 脚本指定的选项调用 AWK 脚本文件打印特定字段

EXAMPLE

-N=field with a list of Names ==> is the field number 2
-A=field with a list of Addresses ==> is the field number 4
-P=field with a list of Prices ==> is the field number 6
-D=field with a list of Dates ==> is the field number 10


./SHELLSCRIPT.sh -N -A -P -D

NAMES,ADDRESSES,PRICES,DATES
NAMES,ADDRESSES,PRICES,DATES
NAMES,ADDRESSES,PRICES,DATES

例子

./SHELLSCRIPT.sh -N -D

NAMES,DATES
NAMES,DATES
NAMES,DATES

我正在尝试使用传递字段数的 -v 选项在 AWK 中初始化一个变量,但我在打印它时遇到了一些困难...

这是 AWK 脚本:

#!/usr/bin/awk -f
BEGIN {
FS="\",\"" ;
-v test=2,4,6,10
for (i in test)
print $test[i];
}

当用户未在 shell 脚本中指定某些选项时,AWK 脚本必须排除某些字段。

最佳答案

-v 是 awk ARGUMENT,而不是语言结构。它是您在 awk 命令行中指定的内容,例如 -F。永远不要使用 shebang 从脚本中调用 awk,因为它只是剥夺了可用的功能。而不是你拥有的:

#!/usr/bin/awk -f
BEGIN {...}

你会这样做:

/usr/bin/awk '
BEGIN {...}
' "$@"

然后您可以根据需要使用 awk args、访问 shell 位置参数、导出变量等,例如:

/usr/bin/awk -v test='2,4,6,10' '
BEGIN {...}
' "$@"

现在,为了解决你的实际问题,你会写:

/usr/bin/awk -F'"," -v test='2,4,6,10' '
BEGIN {
split(test,array1,/,/)
for (i in array1)
array2[array1[i]]
}
{
print "array1:"
for (i=1; i in array1; i++) {
print i, $(array1[i])
}
print "array2:"
for (i in array2) {
print i, $i
}
}
' "$@"

当您关心字段的输出顺序时,将使用 array1,当您不关心顺序时,将使用 array2。

关于shell - AWK如何初始化具有多个要打印的字段的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23312049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com