2018.10.12

假设有这样的文本

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

你可能感兴趣的:(2018.10.12)