2017-11-07 4 views

答えて

0

次のコマンドを実行すると、最初のタブで '' あなたの入力ファイルをフォーマットし、置き換えられますawkが適切に処理できるようにします。

awkは2行目の出力の処理を開始し、次に挿入クエリを作成します。あなたはまた、awkのための別のフィールド区切り定義された可能

sed 's/ ,/\t/g' test.txt | awk '{if(NR>=2) print "INSERT INTO DB (DATE, item) VALUES(\x27"$1"\x27, \x27"$2"\x27);";}' > my_insert_queries.out 

:AWKのコマンドラインで

を、FSは処理を向上させるために-F <sep> (or -v FS=<sep>)

の代わりに、SEDを使用して指定することができます速度。

awk -F' ,' '{if(NR>=2) print "INSERT INTO DB (DATE, item) VALUES(\x27"$1"\x27, \x27"$2"\x27);";}' test.txt > my_insert_queries.out 
+1

あなたが 'ここawk'を達成することはできませんsed''では何もありません。 'sed'の出力を' awk'にパイプするのは残酷で、回避することができます。 – sjsam

+0

ええ、私はフィールドの区切りを変更することを提案しています: – Allan

+0

あるいは 'sed -n '2、$ s /\(.*\),\(.*\)/'" INSERT INTO DB(DATE 、アイテム)VALUES( '\\ 1'、 '\\ 2')/ p "| SQL – tripleee

0

使用awkが入力をサニタイズして、以下のようwhile-loopにヌル区切りの値を渡す:

# cat 47153204.txt #note that I have added extra spaces/commas to make things more difficult 

DATE,ITEM 
2017-11-06,01001 
2017-11-06, 01005 
2017-11-06, 01013 

# awk -F '[ ,]+' 'NR>1{printf "%s\0%s\0",$1,$2}' 47153204.txt | 
while IFS= read -r -d '' date time 
do 
# Use the date & time values to construct the query. 
done 
関連する問題