2014-05-15 98 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数组中。