AIX ksh利用 grep 検索で マッチした行とn段下(上)の行を合わせて表示したい
- 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行目にあるとわかっている時に、 取り出したい行を複数指定して表示させるにはどのようにコマンドを打てばよいですか?
- user010014
- お礼率78% (111/142)
- その他(OS)
- 回答数3
- ありがとう数13
- みんなの回答 (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)
-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)
以下、linuxのgrepのオプションですが、使えないのですか? -C [NUM], -NUM, --context[=NUM] NUM で指定した行数 (デフォルトは 2) だけ、パターンにマッチした行の前後の行も表示します。 取り出す行がわかっているなら、 http://ambiesoft.ddo.jp/blog/archives/328
関連するQ&A
- grep 検索 検索対象の行と、そのn段下(もしくは上)までの行を合わせて出力したい
ファイル ./test の内容は以下のとおりです。 test1 30 50 12 test2 60 12 01 test3 *** 20 *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (1)例えば "test2"という文字列を含む行と、合わせて下3行を拾って表示させたい時は、どのようにコマンドを打てばよいのですか? test2 60 12 01 のように表示させたい。 (2)あらかじめ、とりだしたい情報がn行目にあるとわかっている時に、 取り出したい行を複数指定して表示させるにはどのようにコマンドを打てばよいですか?
- ベストアンサー
- Linux系OS
- 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 を表示したい。
- ベストアンサー
- Windows系OS
- 文字検索で1行前を表示させる
文字検索で教えてほしいのですが、ログ表示の中にて”ERROR"と表示された1行上の文章も一緒に表示させるコマンド(プログラム)を探しています。 11111 22222 33333 44444 33333 ERROR grepコマンドだと、ERRORで検索するとERRORのみが表示されてしまい、1行上の文章が表示されません。また1行上の文章に関しては何が記載されているかわからないため、検索対象にすることが出来ない状態となっております。 どなたかご教授をいただけないでしょうか? お願いいたします。
- ベストアンサー
- Linux系OS
- 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で集計したとき、集計行にその上の行の文字データを表示させたい
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の使い方に問題ないか教えて頂けませんでしょうか? よろしくお願いします。
- ベストアンサー
- Visual Basic
- 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 などで、単純なコマンドでワンライナーで実現したいです。 どうぞアドバイスを宜しく御願いいたします。
- ベストアンサー
- Linux系OS
補足
う~ん、使えないみたいですね~・・・ -c オプションはあるみたいですが、意味が違うみたいです。