[英]pipe awk output into c program
嗨,我编写了一个ac程序,该程序需要3个整数作为输入:
./myprogram 1 2 3
我的目标是将数据从csv文件传送到c程序的输入中。 我使用以下命令从c程序中抓取每一行:
for i in $(seq 1 `wc -l "test.csv" | awk '{print $1}'`); do sed -n $i'p' "test.csv"; done;
然后将其输出通过管道传递到我的c程序中。 我试着做:
for i in $(seq 1 `wc -l "test.csv" | awk '{print $1}'`); do sed -n $i'p' "test.csv"; done; | ./myprogram
但是我得到:
Line
bash: syntax error near unexpected token `|'
如何将输出通过管道传输到c程序?
谢谢
当您真正尝试理解Shell给出的错误消息时,它会有所帮助:
Line
bash: syntax error near unexpected token `|'
如果您考虑一下,当您在管道中将命令链接在一起时,永远不会有;
之前|
, 例如:
ls | wc -l
# and not: ls; | wc -l
之后的一切;
就像一个独立的新命令,就像您在一个全新的,清晰的命令行上键入它一样。 如果输入| hello
在清晰的命令行上| hello
,您将得到完全相同的错误,因为这与; | ...
完全相同; | ...
; | ...
; | ...
在您的脚本中,例如:
$ | hello
-bash: syntax error near unexpected token `|'
其他人已经回答了这个问题,但我也想敦促您对脚本进行其他改进:
始终使用$()
代替反引号,例如:
for i in $(seq 1 $(wc -l "test.csv" | awk '{print $1}')); ...
您不需要那里的awk
,这同样适用:
for i in $(seq 1 $(wc -l "test.csv")); ...
您可以将整个脚本简化为这样,以达到相同的效果:
./myprogram < test.csv
在shell中,它不喜欢显式的行终止符,后接管道( |
)。 管道已分隔命令。 所以你要:
for i in $(seq 1 `wc -l "test.csv" | awk '{print $1}'`); do sed -n $i'p' "test.csv"; done | ./myprogram
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.