2

私は持っている

while read $field1 $field2 $field3 $field4
do
  $trimmed=$field2 | sed 's/ *$//g'
  echo "$trimmed","$field3" >> new.csv
done < "$FEEDS"/"$DLFILE"

問題は、readフィールドをcsvスタイルに分割できないことですよね?以下の入力 csv 形式を参照してください。

列 3 と列 4 を取り出し、列 2 からパディングを取り除く必要があります。引用符は必要ありません。

列番号付きの Csv 形式: 12 24(")25(,)26(")/27(Field2values) 42(")/43(,)/44(Field3 decimal values) "Field1_constant_value","Field2values ",Field3,フィールド4

Field1 は定数であり、無関係です。データは引用され、引用符内で 2 ~ 23 になります。フィールド 2 は、列 27 ~ 41 内の引用符で固定され、左側にデータがあり、右側にスペースが埋め込まれています。Field3 は、10 進数の前に 1、2、または 3 桁、後ろに 2 桁の 10 進数で、パディングはありません。col 74 から始まります。Field4 は日付で、今はあまり気にしません。

4

2 に答える 2

6

はい、read を使用できます。環境変数IFS-- Internal Field Separator -- をリセットするだけで、現在の値 (デフォルトでは空白) ではなく、独自の区切り文字で行が分割されます。

指定された内容の入力ファイル「a.csv」を考えてみます。

1,2,3,4

2,3,4,5

6,3,2,1

あなたはこれを行うことができます:

IFS=','
while read f1 f2 f3 f4; do
    echo "fields[$f1 $f2 $f3 $f4]"
done < a.csv

出力は次のとおりです。

フィールド[1 2 3 4]

フィールド[2 3 4 5]

フィールド[6 3 2 1]

于 2012-11-17T20:08:20.457 に答える
1

ここにいくつかの良い出発点があります: http://backreference.org/2010/04/17/csv-parsing-with-awk/

于 2012-11-17T20:11:13.387 に答える