在for循环中,bash中的awk语句不会执行

时间:2015-06-21 04:48:25

标签: linux bash loops awk

我有一个带有搜索字词(patts)的文本文件,我需要从' patterns.txt'中删除。我已经测试了awk语句并且它正常工作 - 除了在脚本中。

此外,当我回显标准输出时,$ target变量正确打印。但是,出于某种原因,声明没有正确执行。

#!/usr/local/bin/bash

input_file='patts'
i=0
while read line; do
  array[$i]=$line
  i=$((i+1))
done < "$input_file"
for (( i=0; i<${#array[@]}; i++ )); do
  target=`eval echo ${array[i]}`
  echo $target
  awk '!/$target/' patterns.txt > temp && mv temp patterns.txt
done

1 个答案:

答案 0 :(得分:3)

Shell变量不会在单引号中扩展。最好使用-v name=value将参数传递给awk:

awk -v target="$target" '!($0 ~ target)' patterns.txt > temp && mv temp patterns.txt

但您似乎可以使用awk替换grep -v

grep -v "$target" patterns.txt > temp && mv temp patterns.txt