AIX ksh利用 grep 検索で マッチした行とn段下(上)の行を合わせて表示したい

このQ&Aのポイント
  • AIXのkshを使用してgrep検索を行い、マッチした行とn段下(または上)の行を合わせて表示する方法について教えてください。
  • bshでは使用できるオプションがkshでは使用できないため、どのように対応するかについても教えてください。
  • また、特定の文字列を含む行とその下の3行を表示する方法や、特定の行を複数指定して表示する方法についても教えてください。
回答を見る
  • ベストアンサー

AIX ksh利用 grep 検索で マッチした行とn段下(上)の行を合わせて表示したい

kshで以下の処理を行いたいのですが、bshで使えるオプションが使えないようです。どうすれば?? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ファイル ./test の内容は以下のとおりです。 test1 30 50 12 test2 60 12 01 test3 *** 20 *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (1)例えば "test2"という文字列を含む行と、合わせて下3行を拾って表示させたい時は、どのようにコマンドを打てばよいのですか? test2 60 12 01 のように表示させたい。 (2)あらかじめ、とりだしたい情報がn行目にあるとわかっている時に、 取り出したい行を複数指定して表示させるにはどのようにコマンドを打てばよいですか?

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

追記 > kshで以下の処理を行いたいのですが、bshで使えるオプションが使えないようです 各コマンドでの機能は、各コマンドに依存する問題で、シェルの違いは関係ありません。 AIXではPOSIXという規格に準じたgrepがインストールされています。 LinuxではGNU grepというGNUが独自拡張したgrepがインストールされています。 なので、(それぞれのシェルがインストールされているとして) AIXでbashを動かしても、grep -B は使えないし、 linuxでkshからgrep -Bとすると正常に動作します。 なお、シェルには外部ファイルを使用しない内蔵コマンドというものがあり、これは(Bash独自の内蔵コマンドがkshで使えないなど)シェルの違いに影響を受けます。

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

-Aとか-BとかはGNU grep独自の拡張なので、AIX等のgrepでは使えません。 もしかしたら別名(ggrep)とか、別ディレトリとかにGNU grepがあるかもしれませんが、環境依存のことなのでなんとも言えません。 解決策の一つはGNU Grepを自前でビルドすることです。 $HOME/binあたりにインストールしましょう。 もう一つは、sed,awk,perl等のスクリプトで同等の処理をすることです。 例えば、awkなら awk '/test2/ {a=3+1;} a>0 {print ; a--}' < test で test2とそれに続く3行を表示します。 (2)は↓にある方法が有効なはずです。 http://oshiete1.goo.ne.jp/qa5810772.html

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

以下、linuxのgrepのオプションですが、使えないのですか? -C [NUM], -NUM, --context[=NUM] NUM で指定した行数 (デフォルトは 2) だけ、パターンにマッチした行の前後の行も表示します。 取り出す行がわかっているなら、 http://ambiesoft.ddo.jp/blog/archives/328

user010014
質問者

補足

う~ん、使えないみたいですね~・・・ -c オプションはあるみたいですが、意味が違うみたいです。

関連するQ&A

  • grep 検索 検索対象の行と、そのn段下(もしくは上)までの行を合わせて出力したい

    ファイル ./test の内容は以下のとおりです。 test1 30 50 12 test2 60 12 01 test3 *** 20 *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (1)例えば "test2"という文字列を含む行と、合わせて下3行を拾って表示させたい時は、どのようにコマンドを打てばよいのですか? test2 60 12 01 のように表示させたい。 (2)あらかじめ、とりだしたい情報がn行目にあるとわかっている時に、 取り出したい行を複数指定して表示させるにはどのようにコマンドを打てばよいですか?

  • cmd 検索対象の行と、そのn段下(もしくは上)までの行を合わせて出力したい

    win 2000 xp vista を使用します。 コマンドプロンプトで下記の処理を行いたいのですが、どのようにコマンドを打てばよいのでしょうか? ファイル .\test の内容は以下のとおりです。 test1 30 50 12 test2 60 12 01 test3 *** 20 *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (1)例えば "test2"という文字列を含む行と、合わせて下3行を拾って表示させたい時は、どのようにコマンドを打てばよいのですか? test2 60 12 01 のように表示させたい。 (2)あらかじめ、とりだしたい情報がn行目にあるとわかっている時に、 取り出したい行を複数指定して表示させるにはどのようにコマンドを打てばよいですか? (3)とりだした行の中に =***となる部分があれば echo TEST NG!! を実行したい。 なければ echo TEST OK を表示したい。

  • 文字検索で1行前を表示させる

    文字検索で教えてほしいのですが、ログ表示の中にて”ERROR"と表示された1行上の文章も一緒に表示させるコマンド(プログラム)を探しています。 11111 22222 33333 44444 33333 ERROR grepコマンドだと、ERRORで検索するとERRORのみが表示されてしまい、1行上の文章が表示されません。また1行上の文章に関しては何が記載されているかわからないため、検索対象にすることが出来ない状態となっております。 どなたかご教授をいただけないでしょうか? お願いいたします。

  • ExcelのVBAで複数行削除を行う場合

    Excel2007のVBAで複数行を削除する方法を教えて下さい。 Excel2003で使用していたマクロが使えなくなってしまいました・・・。 下記のようなExcelシートに対して複数行ずつ行を削除し、削除対象が無くなるまで 削除処理を行うか、指定した行まで削除処理を行うという事をしたいのですが うまく動きません。 例      A列   B列   C列   D列   E列 1行目 aaa1   bbb1  ccc1 2行目             ccc2 3行目             ccc3 4行目             ccc4 5行目 aaa2   bbb2  ccc1 6行目             ccc2 7行目             ccc3 8行目             ccc4 例に対しての結果      A列   B列   C列   D列   E列 1行目 aaa1   bbb1  ccc4 2行目 aaa2   bbb2  ccc4 例に対して、複数行(指定した行数ここでは3行)の削除を行いたいのですが、 単純に複数行(3行)ずつ削除していくのではなく。 1行目や5行目にあるように文字や情報が入力されているA列とB列の情報は 残しつつ、4行目のC列以降の列の情報はすべて活かしていくという事をしたいのです。 Excel2003の時に使用していたVBAは以下のものです。 Sub 行を削除するマクロ() Workbooks("xxxx.xlsx").Activate '処理を行いたいExcel ※1 n = n + 0 LastRow = 2138           '処理を終了させたい行 ※2 Sheets("Sheet1").Select '処理を行いたいシート ※3 Do Until (n > LastRow) Rows(n + 4).Delete Shift:=xlsiftUp '削除したい行指定 ※4 n = n + 3 Loop End Sub 皆様の良いアドバイスやお知恵をお貸しください。 よろしくお願いします。

  • EXCELで文字列を探すコマンドで質問です

    複数のセルを指定しそれらの中から目的の文字列があれば、そのセルの行番号を、そのコマンドのあるセルに表示させるにはどうすれば出来ますか?

  • Excelで集計したとき、集計行にその上の行の文字データを表示させたい

     Excelで集計したとき、合計行には数字などの列データは合計されますが、文字列データの列は数字が出てくるので、折りたたんだときに、たとえば(顧客名の列でAさんだとたら)合計行にも、Aさんという文字を表示させたいです。  手順としては集計させたあとに、マクロで合計行にもその上の文字列を単純にコピーできたらいいです。  手作業でもいいのですが、顧客名が多くて大変です。よろしくお願いします。

  • Application.Matchで特定行の検索

    Excel2007のVBAについてご教授ください。 Application.Matchで特定列の文字列検索を使いたいんですが以下のような構文で使えますでしょうか? ----------------- Set usWS = Worksheets("Sheet1") KeyIdValue = "hogehoge" JANCol = 9 m = Application.Match(KeyIdValue, usWS.Columns(JANCol), 0) ----------------- Sheet1のワークシートの9(I列)列目に"hogehoge"が入っている行数をmに入れたいです。 (最初に見つかった行数で構いません。複数は見つかりません。) 検索されません?というようなエラー(エラー2042)が出るのですが、使い方が誤っていないかご教授させて頂きたいです。 変数の宣言はコンパイルエラーが出ないので問題ありません。 Application.Matchの使い方に問題ないか教えて頂けませんでしょうか? よろしくお願いします。

  • sedを使って複数ファイルの先頭行を表示

    以下の様なファイルがあります。 各ファイルの先頭行をとりだしたいのですが、headコマンドを使うと ファイル名と結果が分かれて表示されます。 sedで、-nオプションの行番号指定で表示することができるので、 sed -n '1p' *.txt のワイルドカード指定でやったのですが、 この場合だと複数ファイルとみてくれなくて、すべてのファイルを ひとつにしてその先頭を表示しているみたいです。 できれば、各ファイル毎に、ファイル名と結果を1行にして表示したい のですが、どうすればよいでしょうか。 参照ファイル cat 1.txt 12345 67890 cat 2.txt abcde fghij cat 3.txt 11111 22222 headコマンドで実行 $ head -n 1 *.txt ==> 1.txt <== 12345 ==> 2.txt <== abcde ==> 3.txt <== 11111 sedで実行 $ sed -n '1p' *.txt 12345

  • N行以上重複している行のみを表示したい

    ファイル(test.txt)の中身に以下のようにIPアドレスがランダムに並んでいて、 この中から、5回以上出現しているIPを抽出して表示したいです。 # cat test.txt 111.111.111.111 222.222.222.222 333.333.333.333 444.444.444.444 111.111.111.111 111.111.111.111 333.333.333.333 444.444.444.444 222.222.222.222 111.111.111.111 333.333.333.333 222.222.222.222 444.444.444.444 333.333.333.333 111.111.111.111 # cat test.txt |sort | uniq -c で、 出現回数と、そのIPが表示されました。 しかし「5回以上出現」という条件をつける方法がわかりませんでした。 単純に、5回以上出現しているIPだけを表示したいのですが、 uniq以外でも、awk sed などで、単純なコマンドでワンライナーで実現したいです。 どうぞアドバイスを宜しく御願いいたします。

  • 教えてください。

    問題9 指定されたテキストファイルの先頭のn行を表示せよ。ファイル名と表示行数nは コマンドライン引数として与える。作成したコマンド(プログラム名)をheadとすると、 入力の書式は以下のようになる。 head [-n] ファイル名 表示行数nの指定は省略可能とし、省略時はn=10とする。また、ファイルの内容が n行に満たないときは、すべての行を表示する。 どのようにプログラムをつくればあまりわかりません。教えてください。