一个awk语句解决:
awk 'BEGIN{RS=""}{if($0~"A1" && $0~"A2" && $0~"A3" && $0~"A4" && $0~"A5" && $0~"A6" && $0~"A7")print "yes";else print "no"}' text.txt
思路就是:
1)awk是按记录(默认为一行文件内容)处理文本的,现在将awk的记录分隔符RS清空(默认是换行符),这样整个文件就会被认为是一条记录。
2)判断该条记录(即整个文件内容)是否匹配A1~A7,都匹配,则打印yes,否则打印no。
不过不知道awk的buffer里能放多少内容,如果文件较大会不会有问题,这种情况有待验证。
————————————————————————————
还有一种跟楼上类似的方式,更容易看懂。
#!/bin/bash
flag=0
for i in {1..7}
do
cat text.txt|grep -q "A$i"
[ $? -ne 0 ] && flag=1
done
if [ $flag -eq 0 ]; then
echo yes
else
echo no
fi
考虑性能的话,我觉得awk的方式会更快,因为只需要读一次文件,读入awk的buffer中,然后再分别匹配A1~A7。而第二种方式需要循环读文件。文件操作是最慢的了。
#!/bin/bash
cat text.txt|grep A1 >/dev/null
if [ $? -eq 0 ]
then
cat text.txt|grep A2 >/dev/null
if [ $? -eq 0 ]
then
echo yes
else
echo no
fi
fi