2015-11-05 59 views
0

我有一個簡單的問題,但我無法找到答案)Postgres的:管道給psql

我有以下腳本:

sqsh -S SyBaseServer -U sybuser -P mypass -C 'select top 10000 * from dba.sybtable; -mbcp' | \ 
awk '{print substr($0, 0, length($0)-1)}' | \ 
psql -1 postgresql://admin:[email protected]:5432/pgbase -f sybtopg.sql 

我怎樣才能的輸出中最後字符串後添加EOF AWK?我必須關閉psql的STDIN。

謝謝!

PS 失敗的原因並不是缺乏EOF。 這是正確的管道:

sqsh -S SyBaseServer -U sybuser -P mypass -C 'select top 10000 * from dba.wybtable; -mbcp' \ 
| awk '{print substr($0, 0, length($0)-1)}' | \ 
/psql postgresql://admin:[email protected]:5432/pgbase -c "DELETE FROM testtable; COPY testtable FROM STDIN DELIMITER '|' CSV" 
+0

可能重複[如何\'cat << EOF \'在bash中工作?](http://stackoverflow.com/questions/2500436/how-does-cat-eof-work-in-bash) – t0mm13b

+0

當從輸入讀取EOF時,awk將寫入EOF。 – Barmar

+0

@ t0mm13b這是怎麼回事?這個問題裏沒有here-doc。 – Barmar

回答

1

你不需要做任何特殊的事情。當awk在其輸入上達到EOF時,它將執行其END塊(如果有),然後退出,這將關閉管道。這將導致管道中的下一個進程讀取EOF。

如果您希望awk腳本比此更早發送EOF,則必須使用exit語句退出該腳本。

+0

是的,你說得對。失敗的原因不是缺乏EOF。謝謝! – Dimaf

相關問題