簡體   English   中英

AWK如何初始化要打印的多個字段的變量

[英]AWK how to initialize a variable with multiple number of fields to print

我正在編寫一個SHELL腳本,它將根據用戶從.sh腳本指定的選項來調用AWK腳本文件,以打印特定字段

EXAMPLE

-N=field with a list of Names               ==> is the filed number 2
-A=field with a list of Addresses           ==> is the filed 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參數,而不是語言構造。 這是您在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。

也許這會有所幫助:

awk -v bozo=12 -v brains=99 'BEGIN{print bozo,brains}' /dev/null
12 99

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM