假设我想将一个字符串传递给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
是否存在允许字符串s
直接拆分为其组件的awkism或gawkism,这些组件成为arr
中的索引条目?
原因是(更大的图片)我想要这样的东西(伪awk):
awk -v s="1,4,55" 'BEGIN{[arr to arr["1"],arr["5"],arr["55"]} $3 in arr {action}'
答案 0 :(得分:3)
不,没有更好的方法将分离的子串映射到数组索引而不是:
split(str,tmp); for (i in tmp) arr[tmp[i]]
FWIW如果您不喜欢这种方法来执行最终的伪代码:
awk -v s="1,4,55" 'BEGIN{split(s,tmp,/,/); for (i in tmp) arr[tmp[i]]} $3 in arr{action}'
然后另一种获得相同行为的方法是
awk -v s=",1,4,55," 'index(s,","$3","){action}'
答案 1 :(得分:1)
可能无用且不必要的复杂,但我会用while
,match
和substr
打开游戏:
$ awk -v s="A:B:F:G" '
BEGIN {
while(match(s,/[^:]+/)) {
a[substr(s,RSTART,RLENGTH)]
s=substr(s,RSTART+RLENGTH)
}
for(i in a)
print i
}'
A
B
F
G
我渴望看到(如果有的话)一些有用的解决方案。我尝试过使用asort
等等。
答案 2 :(得分:1)
其他方式awkism
cat file
1 hi
2 hello
3 bonjour
4 hola
5 konichiwa
运行它,
awk 'NR==FNR{d[$1]; next}$1 in d' RS="," <(echo "1,2,4") RS="\n" file
你明白了,
1 hi
2 hello
4 hola