【问题标题】:unix shell script to check for EOF用于检查 EOF 的 unix shell 脚本
【发布时间】:2014-12-11 09:16:13
【问题描述】:

我希望将两个文件的名称作为 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 定义 1 ghi 0

【问题讨论】:

  • 问题和标题几乎没有共同之处。这听起来像家庭作业,这很好,但问题需要更加集中。
  • 如果您显示一些示例输入和预期输出也会有所帮助。

标签: bash shell eof


【解决方案1】:

要逐字读取文件,用逗号分隔,请使用这个 sn-p:

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

【讨论】:

  • 仍然无法正常工作....你能告诉我在某种情况下我应该如何检查文件结尾......我在某处读到 unix 文件没有 EOF
  • 定义仍然无法正常工作,并详细说明您是如何对其进行测试的以及哪些地方无法正常工作。如果经过全面测试且 100% 有效,则此解决方案。无需像在 C 代码中那样检查 EOF 或 fgetc。
  • 我举个具体的例子。假设 filea 在第一行有 abc、def、ghi 之类的词,而在第二行有 jkl、mno 之类的词。现在我应该如何提取这些字段并将其与第二个文件中的单词进行比较。我想比较单词而不是字符
  • 你写了 对于第一个文件中的每个字符,我需要计算它在第二个文件中的出现次数,现在你说 我想比较单词而不是字符 哪一个是正确的?最好根据您的实际要求编辑问题。
  • 这里有个问题。你想数occurrences of "abc",而不是number of lines having "abc"。如果该单词在一行中出现两次,则此代码将失败...
【解决方案2】:

另一种方法:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多