我使用一个显示多行结果的命令。 我希望看到结果,然后显示结果的行数。
今天我做了:
my-command XXX # to display the result
echo "Number :" $(my-command XXX | wc -l) # to display the number of lines
但如果我想更改命令,我必须更改它两次。是否有更好的方法来获得相同的结果?
答案 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)"