从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+##"