今あるファイルの中身の読み込みに、

set EDPTODAY = `awk -F , '/$EDPCLND/ {print $5,$9}'`
echo $EDPTODAY

と書くと、構文エラーが出てしまいます。
","区切りなので、"awk -F , "と表記したのですが・・・
($EDPCLNDで宣言しているファイルの存在は確認しました。)
お解りの方、どうお宜しくお願いいたします。

A 回答 (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]/ {
何かの処理;
}
}'
    • good
    • 0

ファイルの中身、シェル変数に格納されている文字列、標準入出力で流れる


データの区別が完全にはついていないとみうけられます。

$EDPCLND という変数には、ファイル名じゃなくて、PDXFGKS.TXT というファ
イルの中身のある1行が入っているのですね?で、その行の、第5,第9フィール
ドを、別の変数に格納するということでよろしいでしょうか?

それなら、
set EDPTODAY = `echo $EDPCLND | awk -F, '{print $5,$9}'`
でどうでしょう?
    • good
    • 0

set EDPTODAY=`cat $EDPCLND|awk '{FS=",";} /.*/{print $5,$9;}'`


echo $EDPTODAY

はどうでしょうか?
    • good
    • 0

すみませんが、何をしたいのでしょう?



EDPCLNDというシェル変数にはファイル名が入っているのですか?
そのファイルは何行あるかわかりませんが、その第5, 第9フィールドを
全部とりだして、EDPTODAY にセットしたいのですか?

awk で /.../ というのは、そこに書かれたパターンにマッチした行について、
対応する { ... } の内容を実行しろということですので、
awk は標準入力に対して、$EDPCLND というパターンを探します。
でも、$ は行末にマッチする表現なので、
行末以降にある EDPCLND という文字列があるとは考えられないので、
たぶん、どの行にもマッチしないでしょう。

$EDPCLND が含むファイル名のファイルの中身を awk に読ませたいなら、
awk '/.../ {...}' $EDPCLND
となるのが普通です。
それ以外のことをしたいのなら、補足してください。

この回答への補足

補足します。
有るファイル(EDPTODAYとは別ファイル)を一行単位で読み込み
(此処の部分は別なので書いていません)、
読み込み内容をEDPTODAYに格納、そしてその切り出した内容の
その第5, 第9フィールドをとりだして中身を確認と言う処理を行いたくて、
こういう風に書いたのですが・・・

そうすると、上記のような処理を行いたい場合には
set EDPCLND = `more PDXFGKS.TXT`(PDXFGKS.TXTの中がまだ一行しかないのでこうしています)
set EDPTODAY = more $EDPCLND`awk -F , '{print $5,$9}'`
で宜しいのでしょうか?

補足日時:2001/10/26 09:10
    • good
    • 0

awk で、-F を使うときは、スペース無しで


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ