在unix shell脚本中不使用'wc'命令计算文本文件中的单词

时间:2014-11-29 08:40:29

标签: shell

这里我找不到文本文件中的单词数。我需要做出哪些可能的改变? tty在此计划中的用途是什么?

echo "Enter File name:"  
read filename  
terminal=`tty`  
exec < $filename  
num_line=0  
num_words=0
while read line  
do  
    num_lines=`expr $num_lines + 1`  
    num_words=`expr $num_words + 1`  
done    

2 个答案:

答案 0 :(得分:0)

tty命令打印连接到标准输出的终端的名称。在你的程序环境中,它没有任何重要意义,你也可以删除该行并运行。

关于单词计算的数量,您需要解析每一行并使用空格作为分隔符来查找它。目前,该计划只找到行数$num_lines并对$num_words使用相同的计算。

答案 1 :(得分:0)

使用数组读取文件中的单词数有一种简单的方法:

#!/bin/bash

[ -n "$1" ] || { 
    printf printf "error: insufficient input. Usage: %s\n" "${0//\//}"
    exit 1
}

fn="$1"

[ -r "$fn" ] || {
    printf "error: file not found: '%s'\n" "$fn"
    exit 1
}

declare -i cnt=0

while read -r line || [ -n "$line" ]; do        # read line from file
    tmp=( $line )                               # create tmp array of words
    cnt=$((cnt + ${#tmp[@]}))                   # add no. of words to count
done <"$fn"

printf "\n %s words in %s\n\n" "$cnt" "$fn"     # show results

exit 0

<强>输入

$ cat dat/wordfile.txt

Here I could not find the number of words in the text file. What 
would be the possible changes do I need to make? What is the use 
of tty in this program?

<强>输出:

$bash wcount.sh dat/wordfile.txt

 33 words in dat/wordfile.txt

wc -w确认:

$ wc -w dat/wordfile.txt
33 dat/wordfile.txt

<强> TTY吗

使用terminal=tty将当前交互式shell的终端设备分配给terminal变量。 (这是一种确定您所连接的tty设备的方法,例如/dev/pts/4