[英]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.