是否有一种优雅的方法(按行)将命令的STDOUT拆分为两个不同的程序?
用例是我有一个命令,该命令可以打印出我想通过管道传输到column -t
的列数据,但是它也可以在顶部打印一些常规信息和日志,例如
$ first-command
Connecting to XYZ
Total lines: 2
Id Status Type
id-001 INPROGRESS 5
id-002 PENDING 1
如果按原样将其通过管道传输到column
,则会得到:
$ first-command | column -t
Connecting to XYZ
Total lines: 2
Id Status Type
id-001 INPROGRESS 5
id-002 PENDING 1
相反,我希望它正常打印前两行,然后column
打印其余两行,例如
$ first-command | split-stdout -n 2 "cat" "column -t"
Connecting to XYZ
Total lines: 2
Id Status Type
id-001 INPROGRESS 5
id-002 PENDING 1
编辑:将前X行直接插入STDOUT也可以。
答案 0 :(得分:2)
SigninHistory.update(member_id, logout_time: Time.now)
有效。
我没有将输出内容吐出来的命令,所以我将其放入示例文件中:
awk
将其输入以下$ cat column.txt
Connecting to XYZ
Total lines: 2
Id Status Type
id-001 INPROGRESS 5
id-002 PENDING 1
,然后获取所需的输出:
awk
该代码专门针对行号<= 2:
$ cat column.txt | awk 'NR<=2{print;next}{print | "column -t"}'
Connecting to XYZ
Total lines: 2
Id Status Type
id-001 INPROGRESS 5
id-002 PENDING 1
仅打印输出并转到下一行:
NR<=2
。
对于大于第二行的所有行,将执行下一个块,并将其打印到{print; next}
的管道中
答案 1 :(得分:0)
您可以使用tee命令以相同的输入“馈送”两个不同的命令:
echo "hello world" | tee >(cut -d' ' -f2) | cut -d' ' -f1
输出
hello
world
对于您要执行的工作,您可以将first-command
的输出发送到tee
,然后将前两行打印到输出文件>(head -2 > output)
,然后打印其余的行以将它们处理为相同的输出tail -n +3 | column -t >> output