複数のファイルがあり、それぞれの列数が異なります。データベースに挿入するために変換したいです。
たとえば、ファイルtest01は次のようになります。
0001 000000000000001 john smith 45 500
0002 000000000000002 peter jackson 20 80
0003 000000000000002 robert brown 35 100
0004 000000000000007 sarah white 40 300
私が望む出力は次のとおりです。
('0001','000000000000001','john smith','45','500'),
('0002','000000000000002','peter jackson','20','80'),
('0003','000000000000002','robert brown','35','100'),
('0004','000000000000007','sarah white','40','300');
これを達成するには、次のスクリプトを使用します。
cat test01 |awk -F'\t' '{print "('\''"$1"'\'','\''"$2"'\'','\''"$3"'\'','\''"$4"'\'','\''"$5"'\''),"}' |sed '$ s/.$/;/'
うまくいきます。問題は、異なる列数の異なるファイルを見つけると発生するため、スクリプトを手動で変更する必要があります。
AWKの変数NFを使用して列数を取得できることはわかっていますが、スクリプトでこの変数をforループとどのように結合しますか?
私が試したとき
cat test01 | awk '{for (i = 1; i <= NF; i++){print $i"'\'','\''"}}'
私は次のような結果を得ます。
0001','
000000000000001','
john','
smith','
45','
500','
0002','
000000000000002','
peter','
jackson','
20','
80','
0003','
000000000000002','
robert','
brown','
35','
100','
0004','
000000000000007','
sarah','
white','
40','
300','
ベストアンサー1
入力ファイルがタブで区切られている場合は、次のことを試すことができます。
awk -F"\t" -v q="'" -v OFS="','" '$1=$1 {print "(" q $0 q ");"}' filename
または、印刷機能に引用符を挿入してください。
awk -F"\t" -v OFS="','" '$1=$1 {print "(" "\x27" $0 "\x27" ");"}' filename