从bash中得到wc的整数

有没有办法得到wc在bash中返回的整数?

基本上我想在文件名后面写行号和字数。

output: filename linecount wordcount这是我到目前为止:

 files=`ls` for f in $files; do if [ ! -d $f ] #only print out information about files !directories then # some way of getting the wc integers into shell variables and then printing them echo "$f $lines $ words" fi done 

您可以使用cut命令来获取wc输出的第一个字(这是行或字数):

 lines=`wc -l $f | cut -f1 -d' '` words=`wc -w $f | cut -f1 -d' '` 

最简单的答案:

 wc < filename 
 wc $file | awk {'print "$4" "$2" "$1"'} 

根据需要调整布局。

使用正面逻辑(“是文件”)比负面(“不是目录”)更好

 [ -f $file ] && wc $file | awk {'print "$4" "$2" "$1"'} 

只是:

 wc -l < file_name 

会做这项工作

有时wc在不同的平台上以不同的格式输出。 例如:

在OS X中:

 $ echo aa | wc -l 1 

在Centos中:

 $ echo aa | wc -l 1 

所以只使用剪切可能不会检索数字。 请尝试tr删除空格字符:

 $ echo aa | wc -l | tr -d ' ' 

如果您将文件名redirect到wc则会忽略输出中的文件名。

击:

 read lines words characters <<< $(wc < filename) 

要么

 read lines words characters <<EOF $(wc < filename) EOF 

而不是用来迭代ls的输出,这样做:

 for f in * 

这将工作,如果有文件名包含空格。

如果你不能使用globbing,你应该在一段while read循环:

 find ... | while read -rf 

或使用stream程替代

 while read -rf do something done < <(find ...) 

接受/stream行的答案不适用于OSX。

以下任何一种都应该在bsd和linux上可移植。

 wc -l < $f | tr -d ' ' 

要么

 wc -l $f | tr -s ' ' | cut -d ' ' -f 2 

要么

 wc -l $f | awk '{print $1}' 

如果文件很小,可以调用wc两次,然后使用下面的内容,避免了pipe道进入额外的过程:

 lines=$((`wc -l $f`)) words=$((`wc -w $f`)) 

$((...))是bash的算术扩展 。 在这种情况下,它从wc的输出中删除任何空格。

如果您需要linecount wordcount,此解决scheme更有意义。

 typeset -ia=$(wc -l fileName.dat | xargs echo | cut -d' ' -f1) 

sed怎么样?

 wc -l /path/to/file.ext | sed 's/ *\([0-9]* \).*/\1/' 

试试这个数字结果:
nlines = $(wc -l <​​$ myfile)

尝试这个:

 wc `ls` | awk '{ LINE += $1; WC += $2 } END { print "lines: " LINE " words: " WC }' 

它会创build行数和字数(LINE和WC),并使用从wc中提取的值(第一列值为$ 1,第二列值为$ 2)增加它们,最后打印结果。

另一种方式,类似于@BananaNeil发布的内容:

 $ cat myfile.txt | wc -l 

“基本上我想在文件名后面写行号和字数。”

 answer=(`wc $f`) echo -e"${answer[3]} lines: ${answer[0]} words: ${answer[1]} bytes: ${answer[2]}" 

输出:myfile.txt行:10个字:20字节:120

 files=`ls` echo "$files" | wc -l | perl -pe "s#^\s+##"