3

さて、私は私が持っているいくつかのcsvファイルのいくつかのコンマをクリアするために簡単なawkを書こうとしています。

これがサンプルデータの数行です

  PRD,,,,PEWPRV100D,,,EWPRVU457D,,,,12/31/2011  10:09:14 PM,,,,,5,,,4,,
  PRD,,,,PEWPRV100D,,,EWPRVU250D,,,,12/31/2011  10:09:23 PM,,,,,67,,,69,,
  PRD,,,,PEWREF100D,,,EWREFU045D,,,,12/31/2011  10:09:40 PM,,,,,7,,,5,,
  PRD,,,,PEWPRV100D,,,EWPRVU191D,,,,12/31/2011  10:09:40 PM,,,,,6,,,5,,

簡単な最初のステップとして、これを実行したいと思います(私が最終的にやりたいことはもっと複雑ですが、これは私が最初に行う必要があることであり、これを正しく行うことさえできません:()

   PRD,PEWPRV100D,EWPRVU457D,12/31/2011  10:09:14 PM,5,4,
   PRD,PEWPRV100D,EWPRVU250D,12/31/2011  10:09:23 PM,67,69,
   PRD,PEWREF100D,EWREFU045D,12/31/2011  10:09:40 PM,7,5,
   PRD,PEWPRV100D,EWPRVU191D,12/31/2011  10:09:40 PM,6,5,

これがawkスクリプトでの私の最初の試みです

  #!/bin/awk 
  BEGIN{FS=",";} 
  {print $0,$4,$7,$11,$16,$19 }
  END{print "DONE"}

を生成します

  PRD,,,,PEWPRV100D,,,EWPRVU457D,,,,12/31/2011  10:09:14 PM,,,,,5,,,4,,,,,,,
  PRD,,,,PEWPRV100D,,,EWPRVU250D,,,,12/31/2011  10:09:23 PM,,,,,67,,,69,,,,,,,
  PRD,,,,PEWREF100D,,,EWREFU045D,,,,12/31/2011  10:09:40 PM,,,,,7,,,5,,,,,,,
  PRD,,,,PEWPRV100D,,,EWPRVU191D,,,,12/31/2011  10:09:40 PM,,,,,6,,,5,,,,,,,

私が試したよりわかりやすいスクリプト:

  #!/bin/awk 
  BEGIN{FS=",";} 
  {printf("$$%s$$", $0) }
  END{print "DONE"} 

を生成します

 $$PRD,,,,PEWPRV100D,,,EWPRVU457D,,,,12/31/2011  10:09:14 PM,,,,,5,,,4,,$$
  $$PRD,,,,PEWPRV100D,,,EWPRVU250D,,,,12/31/2011  10:09:23 PM,,,,,67,,,69,,$$
  $$PRD,,,,PEWREF100D,,,EWREFU045D,,,,12/31/2011  10:09:40 PM,,,,,7,,,5,,$$
  $$PRD,,,,PEWPRV100D,,,EWPRVU191D,,,,12/31/2011  10:09:40 PM,,,,,6,,,5,,$$

行全体が1つの列として表示されるため、FS = "、"が区切り文字をコンマに設定していないことを示しています(私は思います)。私もその線の多くの異なる形を試しましたが、どれも違いがないようです。awk実装のマニュアルページには、FSが設定すべき変数であると書かれています。私もhte-Fフラグを試しましたが、どちらも役に立ちませんでした。

私がここで見逃している明らかな何かがありますか?

4

1 に答える 1

3

awk$0は最初の列ではなく、行全体です。 $1は最初の列、2番目の列は$2、というように続きます。したがって、おそらくこれを変更したいと思うでしょう:

{print $0,$4,$7,$11,$16,$19 }

これに:

{print $1,$5,$8,$12,$17,$20 }
于 2012-05-08T16:37:23.857 に答える