2

ヘッダー名を持つ 5k を超えるフィールド/列を含む csv ファイルがあります。特定のフィールドのみをデータベースにインポートしたいと考えています。

インポートする必要がある他の小さなファイルにローカルの infile を使用しています

LOAD DATA
LOCAL INFILE 'C:/wamp/www/imports/new_export.csv'
INTO TABLE table1
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
(colour,shape,size);

スキップする列にダミー変数を割り当てるのは面倒かもしれません。また、ファイルに追加のフィールドがある場合に備えて、将来の証拠としてフィールド ヘッダーを使用して参照することをお勧めします。

ファイルをデータベースにロードする前に、ファイルで awk を使用することを検討しています。しかし、検索で見つけた例は機能していないようです。

これに対する最善のアプローチに関する提案をいただければ幸いです。

4

3 に答える 3

1

これは MvG の回答に似ていますが、gawk4 を必要としないため-F、その回答で提案されているとおりに使用されます。また、目的のフィールドをリストし、リストを反復処理する手法も示しています。これにより、リストが大きい場合にコードの保守が容易になる場合があります。

#!/usr/bin/awk -f
BEGIN {
    col_list = "colour shape size" # continuing with as many as desired for output
    num_cols = split(col_list, cols)
    FS = OFS = ","
}

NR==1 {
    for (i = 1; i <= NF; i++) {
        p[$i] = i # remember column for name
    }
    # next # enable this line to suppress headers.
}

{
    delim = ""
    for (i = 1; i <= num_cols; i++) {
        printf "%s%s", delim, $p[cols[i]]
        delim = OFS
    }
    printf "\n"
}
于 2012-07-05T17:01:30.740 に答える
0

これは、csv テーブルの値に含まれるあらゆる種類の引用符とコンマを処理でき、名前で列を抽出できるフル機能のソリューションです。この回答で提案されている機能が必要gawkであり、それに基づいています。FPAT

BEGIN {
  # Allow simple values, quoted values and even doubled quotes
  FPAT="\"[^\"]*(\"\"[^\"]*)*\"|[^,]*"
}
NR==1 {
  for (i = 1; i <= NF; i++) {
    p[$i]=i # remember column for name
  }
  # next # enable this line to suppress headers.
}
{
  print $p["colour"] "," $p["shape"] "," $p["size"]
}

によって呼び出されるように、これをファイルに書き込みますgawk -f file.awk

列分割機能とヘッダーごとのインデックス機能は一種の直交しているため、GNU 以外の awk でスクリプトの一部を使用して、代わりに使用するのではFPATなく単純に列名で選択することができます-F,

于 2012-07-05T15:27:09.877 に答える
0

実際のデータにコンマはありますか? そうでない場合は、次を使用するのが最適ですcut

cut -d, -f1,2,5,8-12

は名前付きフィールドを選択し、 で行を分割します,。で囲まれたテキスト フィールドのいずれかに"が含まれている,場合、cutについてはわからないため、問題が発生し"ます。

于 2012-07-05T14:35:09.700 に答える