我得到了以下输出,并想测试它的行数(例如wc -l)是否等于2.如果是这样,我想追加一些东西。它必须只使用链管。
开始输入:
echo "This is a
new line Test"
目标输出:
"This is a
new line Test
some chars"
但仅限于开始输入行数等于2。
我尝试过类似的事情:
echo "This is a
new line Test" | while read line ; do lines=$(echo "$lines\n$line") ; echo $all ... ; done
但没有一个想法得到解决方案。 使用sed / awk等是可以的,只有它应该是一个链式管道。
谢谢!
答案 0 :(得分:3)
awk '1; END {if (NR <= 2) print "another line"}' file
这是另一种有趣的方式:bash版本4
mapfile lines <file; (IFS=; echo "${lines[*]}"); ((${#lines[@]} <= 2)) && echo another line
更好的bash:tee进入流程替换
$ seq 3 | tee >( (( $(wc -l) <= 2 )) && echo another line )
1
2
3
$ seq 2 | tee >( (( $(wc -l) <= 2 )) && echo another line )
1
2
another line
$ seq 1 | tee >( (( $(wc -l) <= 2 )) && echo another line )
1
another line
答案 1 :(得分:0)
使用awk它更简单:
[[ $(wc -l < file) -eq 2 ]] && awk 'NR==2{$0=$0 RS "some chars"} 1' file
This is a
new line Test
some chars
答案 2 :(得分:0)
这只会在输入行数为2的情况下产生(增强的)输出:
echo "This is a
new line Test" |
awk \
'NR>2 {exit} {l=l $0 "\n"} END {if (NR==2) printf "%s%s\n", l, "some chars"}'