用于检查EOF的unix shell脚本

时间:2014-10-16 05:44:08

标签: bash shell eof

我希望在bash shell脚本中将两个文件的名称作为命令行参数,然后在第一个文件中为每个单词(单词以逗号分隔并且文件有多行),我需要计算它在第二个档案。 我写了一个像这样的shell脚本

 if [ $# -ne 2 ]
 then
 echo "invalid number of arguments"
 else
 i=1
 a=$1
 b=$2
 fp=*$b
 while[ fgetc ( fp ) -ne EOF   ]
 do
 d=$( cut -d',' -f$i $a )
 echo "$d"
 grep -c -o $d $b 
 i=$(( $i + 1 ))
 done
 fi

例如file1有单词abc,def,ghi,jkl(在第一行)                             mno,pqr(第二行)

和file2有单词abc,abc,def

现在输出应该像abc 2                             def 1                             ghi 0

2 个答案:

答案 0 :(得分:2)

要用逗号分隔的单词逐字阅读,请使用以下代码段:

while read -r p; do
    IFS=, && for w in $p; do
       printf "%s: " "$w"
       tr , '\n' < file2 | grep -Fc "$w"
    done
done < file1

答案 1 :(得分:0)

另一种方法:

words=( `tr ',' ' ' < file1`) #split the file1 into words...

for word in "${words[@]}"; do  #iterate in the words
    printf "%s : " "$word"
    awk 'END{print FNR-1}' RS="$word" file2
    # split file2 with 'word' as record separator.
    # print number of lines == number of occurrences of the word..
done