【问题标题】:count words in a file without using wc在不使用 wc 的情况下计算文件中的单词
【发布时间】:2012-11-18 06:42:42
【问题描述】:

在这里使用 shell 脚本,尝试在不使用 wc 命令的情况下计算文件中的单词/字符/行数。我可以将文件分成几行并轻松计数,但我在这里努力获取单词和字符。

#define word_count function
count_stuff(){
    c=0
    w=0
    l=0
    local f="$1"
    while read Line
    do
        l=`expr $line + 1`
        # now that I have a line I want to break it into words and characters???
    done < "$f"
    echo "Number characters:  $chars"
    echo "Number words: $words"
    echo "Number lines: $line"

}

【问题讨论】:

  • tr -s ' \t\r\n' '\n' 可能会有所帮助。
  • 你为什么不想使用 wc?它几乎随处可用。
  • 看看this
  • 你在使用 bash 吗? kev 指出了其他实现的好资源。 Bash 在这里并不是最好的选择。你很难确保它在所有情况下都有效。例如,默认情况下读取允许使用反斜杠“\”转义行尾。所以你需要做read -r。如果您需要可移植性(mac 或 windows),read -N 可以更好地成功跟踪换行符。仅供参考 ${#parameter} 在 bash 中为您提供变量中的字符数。

标签: shell unix


【解决方案1】:

至于字符,试试这个(将 echo "test" 调整到您获得输出的位置):

expr `echo "test" | sed "s/./ + 1/g;s/^/0/"`

至于线条,试试这个:

expr `echo -e "test\ntest\ntest" | sed "s/^.*$/./" | tr -d "\n" | sed "s/./ + 1/g;s/^/0/"`

===

至于你的代码,你想要这样的东西来计算单词(如果你想完全原始的话):

while read line ; do
 set $line ;
 while true ; do
  [ -z $1 ] && break
  l=`expr $l + 1`
  shift ;
 done ;
done

【讨论】:

    【解决方案2】:

    您可以使用以下 Bash shell 脚本执行此操作:

    count=0
    for var in `cat $1`
    do
        count=`echo $count+1 | bc`
    done
    echo $count
    

    【讨论】:

      猜你喜欢
      • 2016-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多