将字符串直接拆分为数组

daw*_*awg 6 arrays awk gawk

假设我想传递一个字符串,awk以便一旦我将其分割(在模式上),子字符串就成为关联数组的索引(而不是值).

像这样:

$ awk -v s="A:B:F:G" 'BEGIN{ # easy, but can these steps be combined?
                            split(s,temp,":")  # temp[1]="A",temp[2]="B"...
                            for (e in temp) arr[temp[e]] #arr["A"], arr["B"]...
                            for (e in arr) print e 
                            }'
A
B
F
G
Run Code Online (Sandbox Code Playgroud)

是否有一个awkism或gawkism,允许字符串s直接拆分为其组件,这些组件成为索引条目arr


原因是(更大的图片)我想要这样的东西(伪awk):

awk -v s="1,4,55" 'BEGIN{[arr to arr["1"],arr["5"],arr["55"]} $3 in arr {action}'
Run Code Online (Sandbox Code Playgroud)

Ed *_*ton 4

不,没有比以下更好的方法将分隔的子字符串映射到数组索引:

split(str,tmp); for (i in tmp) arr[tmp[i]]
Run Code Online (Sandbox Code Playgroud)

FWIW,如果您不喜欢这种方法来执行最终伪代码的操作:

awk -v s="1,4,55" 'BEGIN{split(s,tmp,/,/); for (i in tmp) arr[tmp[i]]} $3 in arr{action}'
Run Code Online (Sandbox Code Playgroud)

那么获得相同行为的另一种方法是

awk -v s=",1,4,55," 'index(s,","$3","){action}'
Run Code Online (Sandbox Code Playgroud)