get just the integer from wc in bash
有没有办法获得wc在bash中返回的整数?
基本上我想在文件名之后将行号和字数写入屏幕。
这是我到目前为止:
1 2 3 4 5 6 7 8 9 | 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 |
代码>
最简单的回答:
1 | wc < filename |
只是:
1 | wc -l < file_name |
会做的。但是此输出包括前缀空格,因为
1 | wc $file | awk {'print"$4""$2""$1"'} |
根据您的布局进行调整。
使用正逻辑("是文件")而不是负面("不是目录")也更好
1 | [ -f $file ] && wc $file | awk {'print"$4""$2""$1"'} |
您可以使用
1 2 | lines=`wc -l $f | cut -f1 -d' '` words=`wc -w $f | cut -f1 -d' '` |
有时wc在不同平台上以不同格式输出。例如:
在OS X中:
1 2 3 | $ echo aa | wc -l 1 |
在Centos:
1 2 3 | $ echo aa | wc -l 1 |
因此,仅使用剪切可能无法检索数字。而是尝试tr删除空格字符:
1 | $ echo aa | wc -l | tr -d ' ' |
接受/流行的答案不适用于OSX。
以下任何一个都应该可以在bsd和linux上移植。
1 | wc -l <"$f" | tr -d ' ' |
要么
1 | wc -l"$f" | tr -s ' ' | cut -d ' ' -f 2 |
要么
1 | wc -l"$f" | awk '{print $1}' |
如果将文件名重定向到
击:
1 | read lines words characters <<< $(wc < filename) |
要么
1 2 3 | read lines words characters <<EOF $(wc < filename) EOF |
而不是使用
1 | for f in * |
如果有包含空格的文件名,它将起作用。
如果你不能使用globbing,你应该管道进入
1 | find ... | while read -r f |
或使用过程替代
1 2 3 4 | while read -r f do something done < <(find ...) |
如果文件很小,你可以负担两次调用
1 2 | lines=$((`wc -l"$f"`)) words=$((`wc -w"$f"`)) |
如果您需要linecount或wordcount,此解决方案更有意义。
用
1 | wc -l /path/to/file.ext | sed 's/ *\([0-9]* \).*/\1/' |
试试这个数字结果:
nlines = $(wc -l ?$ myfile)
1 2 | files=`ls` echo"$files" | wc -l | perl -pe"s#^\s+##" |
"Basically I want to write the line numbers and word counts to the screen after the file name."
1 2 3 4 5 | answer=(`wc $f`) echo -e"${answer[3]} lines: ${answer[0]} words: ${answer[1]} bytes: ${answer[2]}" |
产出:
myfile.txt文件
线:10
字数:20
字节:120
1 | typeset -i a=$(wc -l fileName.dat | xargs echo | cut -d' ' -f1) |
试试这个:
1 | wc `ls` | awk '{ LINE += $1; WC += $2 } END { print"lines:" LINE " words:" WC }' |
它创建一个行数和字数(LINE和WC),并使用从wc中提取的值来增加它们(第一列的值为$ 1,第二列的值为$ 2),最后打印结果。
另一种方式,类似于@BananaNeil发布的内容:
1 | $ cat myfile.txt | wc -l |