dポイントプレゼントキャンペーン実施中!

いつもお世話になっております。
今回は、以下の仕様なシェルを作りたいのですが、お力をお貸しください。

ファイルからある文字列(xxx)を含んだ1文を抽出します。しかしこの1文の1段上に時間が表示されているのですが、この時間も一緒に持って期待と思っています。該当文字列は膨大にあるので時間帯で分けたいと思います。

例:
ファイル名:TEST.txt
yyyy/mm/dd 00:00:00          ←時間帯も抽出したい
AAAAAAA BBBBBBBBBBBBB CCCCC xxx DDDD ←この一文を他のファイルにコピーします。

grep xxx TEST.txt > TEST.log

上記の該当文字列の1段上の時間帯も引っ張りたいのですがどの様にすればよいでしょうか?
宜しくお願い致します。

A 回答 (4件)

> gの意味は何でしょうか?



 g は global の意味で、次の /xxx/ と組み合わせて、「すべての xxx を含む行に対して」という意味になります。
 . は現在の行番号を表します。前に /xxx/ があるので、/xxx/ を含む行が . になります。".-1,." で「xxx を含む行の一行前から xxx を含む行まで」p で「出力する」ということになります。

> /.-1,.pは該当文字列から-1行を見に行くということで
> 該当文字列から+3行-3行と見に行こうとする場合は、
> どの様に記述すればよいのでしょうか?

 その場合は、".-1,." の代わりに".-3,.+3" と書きます。「.+3 から .-3 まで逆順に」ということでしたら、それはちょっと難しいと思います。
 
 なお、その後分かったのですが、ed には -s オプションをつけた方が良いようです。
    • good
    • 0
この回答へのお礼

返答ありがとう御座います。
大変参考になりました。

お礼日時:2005/11/04 14:15

 grep でなく ed でできます。



echo g/xxx/.-1,.p | ed TEST.txt > TEST.log

をお試しください。
    • good
    • 0
この回答へのお礼

ありがとう御座います。
もし宜しければ、echo g/xxx/.-1,.p | ed TEST.txt > TEST.log
の解説をいただきたいのですが。

gの意味は何でしょうか?
/.-1,.pは該当文字列から-1行を見に行くということで
該当文字列から+3行-3行と見に行こうとする場合は、
どの様に記述すればよいのでしょうか?

大変参考になりました。

お礼日時:2005/11/02 12:34

表題からはずれませんが、ちょっと変化球の回答です。



GNUバージョンのgrepを導入すれば、

# grep -B 1 xxx TEST.txt > TEST.log

で1行前のものも引っ張ってこられます。
Solarisに元々入っているgrepでは出来ません。

GNUバージョンのgrepは、SunFreeware.comなどからバイナリパッケージの形で入手できます。

参考URL:http://www.sunfreeware.com
    • good
    • 0
この回答へのお礼

ありがとう御座いました。
今後の参考にさせて頂きます。

お礼日時:2005/11/04 14:14

表題とはずれますが、Perlならこんな感じです。



#!/usr/bin/perl

# 対象ディレクトリ指定
my $dirPath = "/tmp";

# 対象ファイル指定(正規表現で定義)
my $search = $dirPath ."/TEST*";

# 出力ファイル指定
my $outFile = "/tmp/out.txt";

# ディレクトリ内照査
my @files = glob("$search");

# 出力ファイルオープン
open(OUT, ">$outFile");

# 照査結果のファイルについて書き出し
foreach my $file (@files){
open(IN, "$file") || die "FILE OPEN ERROR!!";
my $cnt = 1;
my $line = "";
while(<IN>){
if($cnt){ $line = $_; $cnt = 0;}
if(/xxx/){
print OUT "$line";
print OUT "$_";
last;
}
}
close(IN);
}

#出力ファイルクローズ
close(OUT);

grepを使った処理ではないので、的がずれておりましたら無視してください。
    • good
    • 0
この回答へのお礼

ありがとう御座います。
Perlを使うときに参考にさせてもらいます。

お礼日時:2005/11/04 11:45

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