从bash中获取wc中的整数

Jor*_*dan 110 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

Ban*_*eil 85

最简单的回答:

wc < filename 
Run Code Online (Sandbox Code Playgroud)

  • 我的观点是,如果你要回答一个(1.5岁)问题,那么将所有信息都放到答案中,那就是全部:) (12认同)
  • 当然可以,您只需传入正确的参数即可。例如,如果您执行“wc -c &lt;文件名”,它只会给您整数字节数,而不会提供其他任何内容。 (5认同)
  • 但不会产生所需的输出. (3认同)
  • 你已经回答了Google,这才算重要.:-) (3认同)

ste*_*ten 82

只是:

wc -l < file_name
Run Code Online (Sandbox Code Playgroud)

会做的.但是这个输出包括前缀空格,wc右对齐数字.

  • 要获得没有空格的行数:`wc -l &lt;​​foo.txt | xargs的参考-/sf/answers/908158611/ (2认同)

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)

  • 为同一文件运行两次wc效率很低. (5认同)
  • 没错,这就是为什么我认为James Broadhead的答案要好得多.由于字段之间的空格数不同,我无法使用`cut`来处理`wc $ f`的完整输出. (3认同)

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)