2014-01-15 24 views
2

您好我寫了一個C程序需要3個整數作爲輸入:管AWK輸出到C程序

./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程序?

由於

+0

改變'完成; |'to'done |' – lurker

回答

1

在外殼,它不象一個明確的線路終端,隨後通過管道(|)。管道已經分隔了這些命令。所以,你想:

for i in $(seq 1 `wc -l "test.csv" | awk '{print $1}'`); do sed -n $i'p' "test.csv"; done | ./myprogram 
+0

ahh ok,非常感謝 – brucezepplin

2

它有助於當你真正嘗試理解錯誤信息外殼爲您提供:

Line 
bash: syntax error near unexpected token `|' 

如果你想想看,當你在管線鏈的命令一起,有從來沒有一個;一個|之前,例如:

ls | wc -l 
# and not: ls; | wc -l 

無論一個;後談到就像是一個獨立的新命令,好像你TY把它放在一個全新的,清晰的命令行上。如果你一個明確的命令行中鍵入| 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 
    
+0

好的細節(+1)。我的是「懶惰的答案」。 ;) – lurker

+1

@mbratch你很公平,通常我不走這麼遠,但可憐的腳本真的打擾我,我只是在心情...感謝投票,我感謝它! – janos