Bash 假设文件名作为命令行参数给定。编写一个shell脚本来计算行数、字符数和单词数
我试图解决这个问题,但我无法解决最后一部分,即“假定文件名作为命令行参数提供” 编写一个shell脚本,显示文件中的字、字符和行的总数。假设文件名作为命令行参数给定Bash 假设文件名作为命令行参数给定。编写一个shell脚本来计算行数、字符数和单词数,bash,shell,unix,Bash,Shell,Unix,我试图解决这个问题,但我无法解决最后一部分,即“假定文件名作为命令行参数提供” 编写一个shell脚本,显示文件中的字、字符和行的总数。假设文件名作为命令行参数给定 echo c=$( wc -c < test.txt) echo "Number of characters in test.txt is $c" echo w=$( wc -w < test.txt) echo "Number of words in test.txt is $w" echo l=$( ec -l &l
echo
c=$( wc -c < test.txt)
echo "Number of characters in test.txt is $c"
echo
w=$( wc -w < test.txt)
echo "Number of words in test.txt is $w"
echo
l=$( ec -l < test.txt)
echo "Number of lines in test.txt is $l"
echo
c=$(wc-c
我必须通过两个测试用例,但我只通过了一个测试用例,因为假设文件名是命令行参数,我无法解决这个问题。这应该可以。按如下所示编写一个脚本,\u script.sh:
echo
c=$( wc -c < test.txt)
echo "Number of characters in test.txt is $c"
echo
w=$( wc -w < test.txt)
echo "Number of words in test.txt is $w"
echo
l=$( ec -l < test.txt)
echo "Number of lines in test.txt is $l"
for F in ${*}
do
echo
c=$( wc -c < ${F})
echo "Number of characters in ${F} is $c"
echo
w=$( wc -w < ${F} )
echo "Number of words in ${F} is $w"
echo
l=$( wc -l < ${F})
echo "Number of lines in ${F} is $l"
done
正如其他人所指出的,如果文件很大,您应该避免运行wc
三次,因此这里有一种方法可以只运行一次并处理计数:
WC=$( wc ${F} )
l=$( echo $WC | awk '{print $1}' )
w=$( echo $WC | awk '{print $2}' )
c=$( echo $WC | awk '{print $3}' )
passed=$1
回音
echo-n“已传递的$中的字符数为”
wc-c<$通过
回音
echo-n“以$passed为单位的字数为”
wc-w<$通过
回音
echo-n“以$passed为单位的字母数为”
wc-l<$通过
${*}中D的
做
回声
c=$(wc-c<${D})
echo“${D}中的字符数为$c”
回声
w=$(wc-w<${D})
echo“${D}中的字数为$w”
回声
l=$(wc-l<${D})
echo“${D}中的行数为$l”
完成
这将起作用
#/bin/bash
echo“$1`wc-m中的字符数<$1`”
echo“$1`wc-w中的字数<$1`”
echo“$1`wc-l中的行数<$1`”
**您也可以使用这种简单的格式**
for F in test.txt
do
echo
c=$( wc -c < test.txt )
echo "number in test.txt is $c"
done
test.txt中F的
做
回声
c=$(wc-c
echo“$1中的字符数为$(wc-m<$1)”
echo“$1中的字数为$(wc-w<$1)”
echo“$1中的行数为$(wc-l<$1)”
打印时需要将test.txt替换为$1。
这将清除这两个测试用例。试试这一个,它工作正常。所有测试均已通过
for F in $*
do
echo
c=$( wc -c < ${F} )
echo "Number in characters in ${F} is $c"
echo
w=$( wc -w < ${F} )
echo "Number in words in ${F} is $w"
echo
l=$( wc -l < ${F} )
echo "Number in lines in ${F} is $l"
done
F in的$*
做
回声
c=$(wc-c<${F})
echo“${F}中字符数为$c”
回声
w=$(wc-w<${F})
echo“在${F}中的字数为$w”
回声
l=$(wc-l<${F})
echo“${F}中的行数为$l”
完成
使用这个简单的解决方案:
wc -c ${*} | awk '{print "Number of characters in " $2 " is " $1}'
wc -w ${*} | awk '{print "Number of words in " $2 " is " $1}'
wc -l ${*} | awk '{print "Number of lines in "$2 " is " $1}'
基本上,它给出了一个问题,即文件名将通过命令行参数传递。因此,基本上您可以通过将该命令行参数用作变量来打印文件名(并非所有测试用例都是test.txt)。 这是我在tekstac平台上接受的代码-
words=`cat $1 | wc -w`
char=`cat $1 | wc -c`
lines=`cat $1 | wc -l`
echo "Number of characters in $1 is $char"
echo "Number of words in $1 is $words"
echo "Number of lines in $1 is $lines"
提示:传递给脚本的第一个命令行参数是
$1
。无需运行wc
三次。最后一个有打字错误!检查手册页面中的wc
。你会发现你不需要这些选项。在谷歌上搜索“如何编写带参数的bash脚本”。这并不难。永远不要使用名为l
的变量,因为它看起来太像数字1
(在某些字体中无法区分),因此会混淆代码。您希望“$@”
,而不是不带引号的$*
,来处理所有有效参数。您还需要引用$F
。虽然此代码可以回答问题,但提供有关此代码回答问题的原因和/或方式的其他上下文可以提高其长期价值。请修复格式(作为代码),并解释您的代码请不要仅将代码作为答案发布,但要说明代码的作用以及如何解决问题。带有解释的答案通常质量更高,更有可能吸引更多的选票。
echo "Number of characters in $1 is $(wc -m < $1)"
echo "Number of words in $1 is $(wc -w < $1)"
echo "Number of lines in $1 is $(wc -l < $1)"
for F in $*
do
echo
c=$( wc -c < ${F} )
echo "Number in characters in ${F} is $c"
echo
w=$( wc -w < ${F} )
echo "Number in words in ${F} is $w"
echo
l=$( wc -l < ${F} )
echo "Number in lines in ${F} is $l"
done
wc -c ${*} | awk '{print "Number of characters in " $2 " is " $1}'
wc -w ${*} | awk '{print "Number of words in " $2 " is " $1}'
wc -l ${*} | awk '{print "Number of lines in "$2 " is " $1}'
words=`cat $1 | wc -w`
char=`cat $1 | wc -c`
lines=`cat $1 | wc -l`
echo "Number of characters in $1 is $char"
echo "Number of words in $1 is $words"
echo "Number of lines in $1 is $lines"