假设有这样的文本
cat a.txt
1
2
3
4
5
10
另外有这样的文本
cat all.tmp.txt
2 3 4
3 6 7
7 8 9
4 5 6
7 8 9
1 4 9
5 6 7
6 7 9
统计一下a.txt 中有多少存在于all.tmp.txt中
shell脚本
#!/bin/bash
echo "" >tmp.txt
cat a.txt|while read pos
do
grep $pos all.tmp.txt>${pos}.txt
if test -s ${pos}.txt;then
a=1
else
a=0
fi
echo $a >>tmp.txt
#echo $pos
done
awk '{sum+=$0}END{print sum;}' tmp.txt
bash tmp.sh
5
有三个知识点是我需要掌握的
1.如何将文本内容追加到一个文件中
比如,脚本中的
echo "" >tmp.txt #建立一个空的文件
echo $a >>tmp.txt #将文本追加到tmp.txt中
shell中 >是创建,而>>是追加
2.了解一下我可能不那么熟悉的shell脚本中的判断语句的表达
if test -s ${pos}.txt;then
a=1
else
a=0
fi
if ;then
else
fi
3.判断一个文件是不是空
用test -s file
如果是空则返回false
非空则返回true
if test -s ${pos}.txt;then
a=1
else
a=0
fi
当然这个问题本身肯定有很多更优解,这个脚本也因为生成太多的中间文件,但是shell中我还没想到有什么好的方法去解决,也许可以试试python
网友评论