对于我在“猫文件”中,从AWK正则表达式读取变量

时间:2019-01-15 17:38:31

标签: bash awk sed

所以我必须遵循以下bash代码:

for i in `cat list1.txt`; do
  cat list2.txt |awk '/$i/{flag=1;next}/Flag2/{flag=0}flag'
done

当然$ i不起作用,因为必须将其正确地从bash传递到AWK,问题是:我用-v等方法尝试了多种方法,但是没有起作用。有想法吗?

1 个答案:

答案 0 :(得分:4)

首先,请参见this page解释为什么不使用

for i in `cat list1.txt`

...曾经。

第二,this为何不使用

cat list2.txt | awk ...

对不起,竖琴。现在...尝试

while read -r val || [[ -n "$val" ]] 
do awk "/$val/ { flag=1; next } /Flag2/ { flag=0 } flag" list2.txt
done < list1.txt

awk放在双引号中...不理想。 或者,如Charles所建议的那样,使用-v(始终收听Charles和Ed ...)

while read -r val || [[ -n "$val" ]] 
do awk -v i="$val" '
     $0 ~ i  { flag=1; next } 
     /Flag2/ { flag=0; }
     flag
   ' list2.txt
done < list1.txt

仍在等待文件样本。 让我们看看这些文件的格式,以便我可以实际运行有效的测试。

请注意,|| [[ -n "$val" ]]仅在有可能最后一条记录没有换行符时才需要。