bash函数中的printf将新行添加到`wc -l`结果中

时间:2019-09-01 16:39:58

标签: bash printf

使用wc,我得到的是一行的行数,然后是文件名:

$ wc -l ./lpm/modelisator.py
426 ./lpm/modelisator.py
$

我尝试进行printf格式化:

$ do_stuff() { printf "lines: %s\n" `wc -l $1` ;}
$
$ do_stuff ./lpm/modelisator.py
lines: 426
lines: ./lpm/modelisator.py
$

我想了解为什么我会得到这两行:

顺便说一句,使用文件作为标准输入,我得到了我想要的:

$ do_stuff() { printf "lines: %s\n" `cat $1 |wc -l` ;} 
$ do_stuff ./lpm/modelisator.py
lines: 426
$

2 个答案:

答案 0 :(得分:1)

调用=QUERY({RepTemplate1!A4:AC63;RepTemplate2!A5:AC64},"SELECT Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9, Col10, Col11 WHERE Col10 = TRUE",1) 时,它将在其中的行数旁边输出文件名。当命令替换没有用双引号引起来时,它将进行单词拆分,即如果其中有空格,则会扩展为多个单词。最后,wc -l filename反复使用格式,直到使用完所有给定参数为止。

假设printf内有10行,然后

file

相同
printf 'lines: %s\n' `wc -l file`

所以,改为这样做:

printf 'lines: %s\nlines: %s\n' '10' 'file'

答案 1 :(得分:0)

只需将\n替换为<space>\t

例如:

## <space> as delimiter
do_stuff() { printf "lines: %s " `wc -l $1` ;} 

## <tab> as delimiter
do_stuff() { printf "lines: %s\t" `wc -l $1` ;}