2014-05-15 129 views
0

我對Unix非常陌生,幾天來一直在研究這個問題。在awk命令中使用FS和RS

我在csv文件中有以下信息集,需要通過Unix進行操作。

BEIGE , 19.50 , STYLE , 05/05/14 
BEIGE , 19.50 , STYLE , 05/06/14 
BEIGE , 19.50 , STYLE , 05/07/14 

使用下面的awk命令我成功地抓住第一行的第一個字段;

l_colour=$(awk 'BEGIN{FS=","} END {print $1}' file) 

我需要每個字段存儲爲在一行的變量(l_colour,l_price,L_TYPE,l_in_date),導入到數據庫然後執行相同的兩線等。

我可以在同一個awk語句中使用FS和RS嗎?

請對我輕鬆點。

感謝,

+0

「輸入數據庫」是什麼意思?我想這部分應該是另一個問題。注意你可以使用'NR'作爲行數,例如'awk'BEGIN {FS =「,」} NR == 1 {print $ 1}'file'將會打印第1行,等等。 – fedorqui

+0

設法使用sqlplus將要導入的數據存儲到數據庫中。這是變量的存儲正在阻止我。 NR對我來說似乎是最好的選擇,謝謝。 – chrisberry86

+0

請注意,如果您提供特定格式(如csv),則有時可以將數據導入數據庫。這也可以幫助。 – fedorqui

回答

0

我知道這是不完全回答PO的問題,但插入從CVS到數據庫中的數據可以通過這樣的事情來完成:

cat file | tr -s ' ' | sed 's/^\(.*\)$/INSERT INTO table(l_colour, l_price, l_type, l_in_date) VALUES(\1);/' 

輸出:

INSERT INTO table(l_colour, l_price, l_type, l_in_date) VALUES(BEIGE , 19.50 , STYLE , 05/05/14); 
INSERT INTO table(l_colour, l_price, l_type, l_in_date) VALUES(BEIGE , 19.50 , STYLE , 05/06/14); 
INSERT INTO table(l_colour, l_price, l_type, l_in_date) VALUES(BEIGE , 19.50 , STYLE , 05/07/14); 
+0

非常棒的建議,謝謝。 – chrisberry86

+1

雖然這對於'cat'和'tr'有點用處...... SQL中的額外空白通常不是問題,所以'sed'的/..../'文件'就足夠了。 。 – twalberg

0

目前還不清楚你希望從awk的一部分中解脫出來。對於輸入你貼,你可以這樣做:

$ while read -r l_colour c l_price c l_type c l_in_date 
do 
    echo "now insert \"$l_colour\", \"$l_price\", \"$l_type\", \"$l_in_date\"" 
done < file 
now insert "BEIGE", "19.50", "STYLE", "05/05/14" 
now insert "BEIGE", "19.50", "STYLE", "05/06/14" 
now insert "BEIGE", "19.50", "STYLE", "05/07/14" 

更改echo線,無論你的數據庫插入命令。

如果這個問題比你告訴我們的還多,谷歌如何將awk輸出存儲在bash數組中。