有没有办法获得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
Ban*_*eil 85
最简单的回答:
wc < filename
Run Code Online (Sandbox Code Playgroud)
ste*_*ten 82
只是:
wc -l < file_name
Run Code Online (Sandbox Code Playgroud)
会做的.但是这个输出包括前缀空格,wc右对齐数字.
Jam*_*ead 55
wc $file | awk {'print "$4" "$2" "$1"'}
Run Code Online (Sandbox Code Playgroud)
根据您的布局进行调整.
使用正逻辑("是文件")而不是负面("不是目录")也更好
[ -f $file ] && wc $file | awk {'print "$4" "$2" "$1"'}
Run Code Online (Sandbox Code Playgroud)
cas*_*nca 52
您可以使用该cut命令获取wc输出的第一个单词(行或单词计数):
lines=`wc -l $f | cut -f1 -d' '`
words=`wc -w $f | cut -f1 -d' '`
Run Code Online (Sandbox Code Playgroud)
Tah*_*koz 34
有时wc在不同平台上以不同格式输出.例如:
在OS X中:
$ echo aa | wc -l
1
Run Code Online (Sandbox Code Playgroud)
在Centos:
$ echo aa | wc -l
1
Run Code Online (Sandbox Code Playgroud)
因此,仅使用剪切可能无法检索数字.而是尝试tr删除空格字符:
$ echo aa | wc -l | tr -d ' '
Run Code Online (Sandbox Code Playgroud)
rou*_*ble 21
接受/流行的答案不适用于OSX.
以下任何一个都应该可以在bsd和linux上移植.
wc -l < "$f" | tr -d ' '
Run Code Online (Sandbox Code Playgroud)
要么
wc -l "$f" | tr -s ' ' | cut -d ' ' -f 2
Run Code Online (Sandbox Code Playgroud)
要么
wc -l "$f" | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)
Pau*_*ce. 10
如果将文件名重定向到wc它,则省略输出文件名.
击:
read lines words characters <<< $(wc < filename)
Run Code Online (Sandbox Code Playgroud)
要么
read lines words characters <<EOF
$(wc < filename)
EOF
Run Code Online (Sandbox Code Playgroud)
而不是使用for迭代输出ls,执行此操作:
for f in *
Run Code Online (Sandbox Code Playgroud)
如果有包含空格的文件名,它将起作用.
如果你不能使用globbing,你应该管道while read循环:
find ... | while read -r f
Run Code Online (Sandbox Code Playgroud)
或使用过程替代
while read -r f
do
something
done < <(find ...)
Run Code Online (Sandbox Code Playgroud)