Предположим, я хочу передать строку в 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
Есть ли awkism или gawkism, что позволило бы строке s
быть непосредственно разделить на компоненты с этими компонентами становятся записями индекса в arr
?
Причина заключается в том (большая картина), я хочу что-то вроде этого (псевдо AWK):
awk -v s="1,4,55" 'BEGIN{[arr to arr["1"],arr["5"],arr["55"]} $3 in arr {action}'
Я думаю, что 'Раскол (улица, TMP); для (i в tmp) arr [tmp [i]] ', вероятно, путь. Благодаря! – dawg
, чтобы избежать отсутствия разделителя окружения * s * во втором решении. Я предлагаю это 'awk -vs =" A: B: C: G "~ ~ (^ | :)" $ 3 "(: | $)" {действие } '' – NeronLeVelu
@NeronLeVelu Это превращает его в сравнение с регулярным выражением, поэтому вам нужно беспокоиться о метасимволах регулярных выражений в строках. В исходном коде использовалось сравнение строк ('$ 3 в arr'), а также код, который я разместил, используя' index() ', поэтому метасимволы regexp будут обрабатываться буквально. –