所以我必须遵循以下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等方法尝试了多种方法,但是没有起作用。有想法吗?
答案 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" ]]
仅在有可能最后一条记录没有换行符时才需要。