#!/bin/bash
awk '$1 == "abc" {print}' file # print lines first column matching "abc"
当第一列匹配数组成员(“12”或“34”或“56”)时如何打印行?
#!/bin/bash
ARR=("12" "34" "56")
添加
另外,当第一列与数组成员(“12”或“34”或“56”)完全匹配时如何打印行?
最佳答案
您可以使用 bash
将字符串插入到 Awk
中使用的正则表达式模式,方法是将 IFS
值更改为 |
字符并做数组扩展如下:
ARR=("12" "34" "56")
regex=$( IFS='|'; echo "${ARR[*]}" )
awk -v str="$regex" '$1 ~ str' file
数组扩展将列表元素转换为以 |
分隔的字符串,例如12|34|56
在这种情况下。
$()
在子 shell 中运行,IFS
的值不会反射(reflect)在父 shell 中。你可以把它写成一行
awk -v str="$( IFS='|'; echo "${ARR[*]}" )" '$1 ~ str' file
OP 还要求对文件中数组中的字符串进行精确匹配,在这种情况下,使用 grep
及其 ERE 支持可以完成这项工作
regex=$( IFS='|'; echo "${ARR[*]}" )
egrep -w "$regex" file
(或)
grep -Ew "$regex" file
关于linux - 如何在 bash 中打印具有特定列匹配数组成员的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47009824/