• ベストアンサー

ファイルの中身の操作について

今あるファイルの中身の読み込みに、 set EDPTODAY = `awk -F , '/$EDPCLND/ {print $5,$9}'` echo $EDPTODAY と書くと、構文エラーが出てしまいます。 ","区切りなので、"awk -F , "と表記したのですが・・・ ($EDPCLNDで宣言しているファイルの存在は確認しました。) お解りの方、どうお宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

すみませんが、何をしたいのでしょう? EDPCLNDというシェル変数にはファイル名が入っているのですか? そのファイルは何行あるかわかりませんが、その第5, 第9フィールドを 全部とりだして、EDPTODAY にセットしたいのですか? awk で /.../ というのは、そこに書かれたパターンにマッチした行について、 対応する { ... } の内容を実行しろということですので、 awk は標準入力に対して、$EDPCLND というパターンを探します。 でも、$ は行末にマッチする表現なので、 行末以降にある EDPCLND という文字列があるとは考えられないので、 たぶん、どの行にもマッチしないでしょう。 $EDPCLND が含むファイル名のファイルの中身を awk に読ませたいなら、 awk '/.../ {...}' $EDPCLND となるのが普通です。 それ以外のことをしたいのなら、補足してください。

ami_mizuno
質問者

補足

補足します。 有るファイル(EDPTODAYとは別ファイル)を一行単位で読み込み (此処の部分は別なので書いていません)、 読み込み内容をEDPTODAYに格納、そしてその切り出した内容の その第5, 第9フィールドをとりだして中身を確認と言う処理を行いたくて、 こういう風に書いたのですが・・・ そうすると、上記のような処理を行いたい場合には set EDPCLND = `more PDXFGKS.TXT`(PDXFGKS.TXTの中がまだ一行しかないのでこうしています) set EDPTODAY = more $EDPCLND`awk -F , '{print $5,$9}'` で宜しいのでしょうか?

その他の回答 (4)

  • mph
  • ベストアンサー率54% (39/72)
回答No.5

あるファイルを一行単位で読み込んで処理するとのことなので testというスクリプトとします。usage: ./test ugo(処理するファイル名) awkのみで書くことも可能ですが、前後にshellの処理が入るとして、一応 参考までに書いてみました。雛型に利用できるかもしれません。 デバックしてないのでその点はご容赦ください。 これならいっそのこと全部awkの方が楽かも。 #!/bin/sh cat $1 |awk '{FS=",";} /.*/ { print $5,$9; do printf("realy do job on this data?(y/n):"); getline reply <"-"; while(reply~/[yYnN]/); if reply~/[yY]/ { 何かの処理; } }'

回答No.4

ファイルの中身、シェル変数に格納されている文字列、標準入出力で流れる データの区別が完全にはついていないとみうけられます。 $EDPCLND という変数には、ファイル名じゃなくて、PDXFGKS.TXT というファ イルの中身のある1行が入っているのですね?で、その行の、第5,第9フィール ドを、別の変数に格納するということでよろしいでしょうか? それなら、 set EDPTODAY = `echo $EDPCLND | awk -F, '{print $5,$9}'` でどうでしょう?

  • mph
  • ベストアンサー率54% (39/72)
回答No.3

set EDPTODAY=`cat $EDPCLND|awk '{FS=",";} /.*/{print $5,$9;}'` echo $EDPTODAY はどうでしょうか?

  • ita3
  • ベストアンサー率67% (25/37)
回答No.1

awk で、-F を使うときは、スペース無しで セパレータを記述します。 awk -F , '/$EDPCLND/ {print $5,$9}' ではなくて、 awk -F, '/$EDPCLND/ {print $5,$9}' とやってみてはいかがでしょうか。

関連するQ&A