我有一个命令,它将计算列附加到stdout,我想要应用变量N
次。
例如,如果我的输入是'hello \ nworld \ n'并且我想要添加0,N=3
次列,我可以输入以下内容:
echo -e 'hello\nworld' | sed 's/$/ 0/' | sed 's/$/ 0/' | sed 's/$/ 0/'
我一直在尝试像愚蠢的想法:
echo -e 'hello\nworld' | (for i in $(seq 1 $N); do echo $(cat) 0; done)
和
echo -e 'hello\nworld' | (for i in $(seq 1 $N); do sed 's/$/ 0/'; done)
但显然这些并没有将管道链接起来。
有什么想法吗?
答案 0 :(得分:1)
使用递归很容易做到:
repeat() {
count="$1"
shift
if [ "$count" -ge 1 ]
then
"$@" | repeat "$((count-1))" "$@"
else
cat
fi
}
示例:
$ echo foo | repeat 0 sed 's/$/ 0/'
foo
$ echo foo | repeat 1 sed 's/$/ 0/'
foo 0
$ echo foo | repeat 3 sed 's/$/ 0/'
foo 0 0 0
答案 1 :(得分:0)
因此,您希望将值0
追加多次N = 3次:
awk -v value="0" -v N=3 \
'{printf "%s", $0; for (i = 0; i < N; i++) printf " %s", value; print "" }'
将值和重复计数作为变量传递给awk
。对于每一行,打印输入;然后添加N个值的副本;然后发出换行符。
您可以使用OFS(输出字段分隔符)代替空格来分隔循环中的输出:
printf "%s%s", OFS, value;