簡體   English   中英

將awk輸出管道到C程序

[英]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 `|'

其他人已經回答了這個問題,但我也想敦促您對腳本進行其他改進:

  1. 始終使用$()代替反引號,例如:

     for i in $(seq 1 $(wc -l "test.csv" | awk '{print $1}')); ... 
  2. 您不需要那里的awk ,這同樣適用:

     for i in $(seq 1 $(wc -l "test.csv")); ... 
  3. 您可以將整個腳本簡化為這樣,以達到相同的效果:

     ./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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM