在Bash中显示命令结果和行的结果数

时间:2016-09-06 17:07:11

标签: bash awk

我使用一个显示多行结果的命令。 我希望看到结果,然后显示结果的行数。

今天我做了:

my-command XXX    # to display the result  
echo "Number :" $(my-command XXX | wc -l)    # to display the number of lines

但如果我想更改命令,我必须更改它两次。是否有更好的方法来获得相同的结果?

4 个答案:

答案 0 :(得分:5)

您可以改用awk:

awk '1; END{print NR}' <(command XXX)
  • 1(默认awk动作)将打印每行命令的输出。
  • END{print NR}将在结尾打印command输出中的#行。

答案 1 :(得分:2)

result=$(command)
echo "Number: $(echo "$result" | wc -l)"

这会将命令的输出放入变量中,然后您可以将其输入wc

答案 2 :(得分:1)

一个简单但内存密集的选项是将输出简单地存储在数组中。

readarray -t result < <(command XXX)
printf '%s\n' "${result[@]}"
printf 'Number: %s\n' "${#result[@]}"

你也可以使用tee,虽然这里可能存在竞争条件。我不会认为Number: NNN总是在tee的输出之后输出。

command XXX | tee > >(printf 'Number: %d\n' $(wc -l))

答案 3 :(得分:1)

output="$(my-command args123)"
echo "$output"
echo "$(echo "$output" | wc -l)"