用awk并行提取bash数组元素
我的虚拟bash数组是:用awk并行提取bash数组元素,bash,awk,Bash,Awk,我的虚拟bash数组是: myArray=(Ann Becky Diana) 我的虚拟文件如下所示: Ann 9 Becky 7 Caroline 8 Diana 5 我想从我的虚拟文件中提取/grep所有以myArray中的项目开头的行,结果如下: Ann 9 Becky 7 Diana 5 array=(Ann Becky Diana) grep -Ff <(pri
myArray=(Ann Becky Diana)
我的虚拟文件如下所示:
Ann 9
Becky 7
Caroline 8
Diana 5
我想从我的虚拟文件中提取/grep所有以myArray
中的项目开头的行,结果如下:
Ann 9
Becky 7
Diana 5
array=(Ann Becky Diana)
grep -Ff <(printf "%s\n" "${array[@]}") f
Ann 9
Becky 7
Diana 5
myarray=(Ann Becky Diana)
awk -v ARR="{myarray[*]}" 'BEGIN{split(ARR,list," ")} {
for (i=1;i<=length(list);i++)
if($1 == list[i])
print $0
}' dummy.txt
我可以使用for循环执行此操作:
for NAME in "${myArray[@]}"; do
awk -v NAME="$NAME" '/^NAME/' dummy.file >> output
done
我的问题如何将bash数组发送到awk并提取想要的信息而不使用循环?是否可以对整个阵列进行操作 我希望有可能做类似的事情:
awk -v ARRAY="${myArray[*]}" '/^ARRAY/' dummy.file
您可以将
grep-Ff
与printf
一起使用,如下所示:
Ann 9
Becky 7
Diana 5
array=(Ann Becky Diana)
grep -Ff <(printf "%s\n" "${array[@]}") f
Ann 9
Becky 7
Diana 5
myarray=(Ann Becky Diana)
awk -v ARR="{myarray[*]}" 'BEGIN{split(ARR,list," ")} {
for (i=1;i<=length(list);i++)
if($1 == list[i])
print $0
}' dummy.txt
array=(安贝基戴安娜)
grep-Ff您可以这样使用:
Ann 9
Becky 7
Diana 5
array=(Ann Becky Diana)
grep -Ff <(printf "%s\n" "${array[@]}") f
Ann 9
Becky 7
Diana 5
myarray=(Ann Becky Diana)
awk -v ARR="{myarray[*]}" 'BEGIN{split(ARR,list," ")} {
for (i=1;i<=length(list);i++)
if($1 == list[i])
print $0
}' dummy.txt
myarray=(安贝基戴安娜)
awk-v ARR=“{myarray[*]}”开始{split(ARR,list,”)}{
对于(i=1;看起来不错,这确实是您希望从这个grep
得到的输出?是的,这很有效。尽管我仍然会w
到grep
:grep-wFf
。是的-w
将是这个grep
中的方便选项