bash:如果输入字符串有2行,则追加新行/字符串/文本

时间:2014-03-24 21:49:24

标签: string bash sed pipe chain

我得到了以下输出,并想测试它的行数(例如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等是可以的,只有它应该是一个链式管道。

谢谢!

3 个答案:

答案 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"}'