0

値を個別のCSVファイルに分割する必要があるCSVファイルがあります。

すでに既存のコードがあります:\

  1. 最初のサブファイルには、1番目と2番目のフィールドに値を含むファイルが必要です

    egrep "^[^,]+,[^,]+," orig.csv > suba.csv

  2. 2番目のサブには、最初の値を含むが2番目の値は空のファイルが含まれています

    egrep "^[^,]+,," orig.csv > subb.csv

私が理解していることから、^[^,]+,手段は値で始まる必要がありますが、値はコンマでなくてはならず、その後にコンマが続きます。

5番目の列を空白にしないという新しい要件があります。

これが私がそうあるべきだと思ったものですが、残念ながらそれはまだ値のない5番目の列で値を受け取ります

egrep "^[^,]+,[^,]+,[^,]+,[^,]+,[^,]+" orig.csv > suba_2.csv

何か案は?

4

2 に答える 2

1

試す:

egrep "^[^,]+,[^,]+,[^,]+,[^,]+,[^, ]+" orig.csv

5番目の要素に空白があるのではないかと思います。

あなたの正規表現は、次の入力で私のために働きました:

% cat orig.csv
1,2,3,4,5,6,7,8,9,10
1,2,3,4,,6,7,8,9,10
1,2,3,4,5
1,2,3,4,
% egrep "^[^,]+,[^,]+,[^,]+,[^,]+,[^,]+" orig.csv
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5
% 

しかし、最後の行1、2、3、4、の最後にスペースを入れたときは違います。

于 2012-09-05T00:07:49.960 に答える
1

使えない理由はありますawkか?

$ awk -F, '{out="subb.csv"} $2{out="suba.csv"} $5{print > out}' orig.csv

これはどのように作動しますか?

それを分解しましょう:

  • -F,区切り文字をコンマに設定します。
  • {out="subb.csv"}デフォルトの出力ファイルを設定します。
  • $2{out="suba.csv"}2番目のフィールドをテストします。空でない場合は、別の出力ファイルを設定します。
  • $5{print > out}5番目のフィールドが空であるかどうかをテストし、空でない場合は、以前に指定された出力ファイルに出力を出力します。

これらの単純な「空の」テストは、完全に確実なものではないことに注意してください。フィールドが「0」の場合、falseと評価されます。データに「0」のフィールドが含まれている可能性があるが、trueとして評価する必要がある場合は、このスクリプトを調整(延長)して、それを考慮に入れることができます。

于 2012-09-05T03:17:36.027 に答える