• ベストアンサー

awkを用いて、特定の文字を含む以下の行を抜き出す

件名にあるように awkを用いて、特定の文字を含む以下の行を抜き出したいのですが どのようにしたらよいでしょうか? 具体的には #cat text aaaa bbb ccc <exe> aa xxxxx vvvv ・・・ というようなファイルtextがあるとき <exe> 以下の行すべてを抜き出したいです。 ご教授お願いします。

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.5

awk '/<exe>/,0' text でいけるかと。 <exe> が第一フィールドにあるときだけとかいう 条件があるなら awk '$1~/<exe>/,0' text

nya1221
質問者

お礼

全部うまくいきました。 みなさまありがとうございます。 自分の勉強不足を痛感いたしました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • notnot
  • ベストアンサー率47% (4851/10265)
回答No.4

正規表現でチェックしたいのか、第一トークンが「とある文字列」と完全一致なのかで違いますが、他の方の冗長な部分を除くと、 awk '$1=="<exe>"{flag=1}flag{print}' awk '/<exe>/{flag=1}flag{print}' 正規表現なら、#3さんがお書きの sed が良いでしょう。

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

awk にこだわらないなら sed -ne '/<exe>/,$p' text でいいんだけどねぇ.

全文を見る
すると、全ての回答が全文表示されます。
  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.2

好みの問題ですが、 awk ' BEGIN { flag=0; } flag { print; next; } $1 == "<exe>" { print; flag=1; }'

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

awk 'BEGIN{ flg=0 }; { if(flg > 0) print; else if($1=="<exe>") {flg=1; print} };' 少々手抜きしましたが使えるでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • awkやsed等で特定の文字間を抜き出す

    cat text aaaa bbbb <AAA> ccc ddd <BBB> eee とあるときに <AAA> ccc ddd <BBB> だけ抜き出したいです。 どのようにすればよいでしょうか?

  • awkで特定の範囲の行を削除したい

    awkなどの使い方がよくわからないので教えてください。 あるテキストファイル中の、"del_start" という文字が入った行から"del_end" という文字が入った行までの全ての行を削除したファイルを作るシェルを作成したいと思っています。 awk(やsed、grep、cat ?)などを使って実現するにはどうすればいいのでしょうか? よろしくお願いします。

  • awkのセパレータ指定について

    awkのセパレータ指定について教えてください。 以下のようなファイルがありそれを'||'区切りで出力したいです。 下記のような指定をしてみたのですが、 うまくいきませんでした。 cat text | awk -F '||' '{print $1}' [test.txt] aaa||bbb||ccc [期待する結果] print $1 → aaa print $2 → bbb print $3 → ccc どなたか教えてください。 よろしくお願いします。

  • シェルで特定行を処理する方法を教えてください。

    初めてご質問させていただきます 数時間考えましたが、全くできない初心者です。 awkとかも使ってみましたが・ちんぷんかんぷんです。 よろしくお願いいたします。 環境:RedHat、シェル:bash [やりたいこと] 特定の文字以外から始まる行を、 特定文字から始まる行へ連結させたい。 (例  aaaから始まっていない行(bbb、ccc、ddd)を、  aaaから始まる行へ出力させる。 ■元となるテキストファイル ============ aaa bbb ccc ddd aaa aaa aaa eee aaa ============ ■整形後のファイル ============ aaabbbcccddd aaa aaa aaaeee aaa ============

  • 今、awkを使ったシェルスクリプトを作っています。

    今、awkを使ったシェルスクリプトを作っています。 aaa bbb ccc ddd ee ff gggg hhh といったファイルから、 bbb,ccc ff,gggg を取り出したいと思っています。 そこで、以下のコマンドをwhileでまわして、$iを増加させることにより、 ファイルを一行ずつ読み取り、目的の列を取り出したく思っています。 A=`cat sample.txt|awk 'NR == $i {print NR, $2;}'` B=`cat sample.txt|awk 'NR == $i {print NR, $3;}'` ところが、awkコマンドの中の$iがシングルクォーテーションでくくられているので、 変数展開されなくて困っています。 何かよい方法があればご教授いただけますでしょうか?

  • 複数行になっている文字列を検索したい

    PERL初心者です。 以下、テキストに複数行になっている箇所の2行目の「BBB」を検索キーとして 3行目の「CCC」を取得したいのと2行目、3行目を1レコードにしたいのですが できません。 test.txt ---------------------------------- 1. AAA BBB CCC DDDD 2. AAA BBB 3. CCC DDDD 4. AAA BBB CCC DDDD ----------------------------------- 以上よろしくお願いします。

  • awk等を用いて、スペースで区切られた特定の文字の次の引数を取得する

    awk等を用いて、スペースで区切られた特定の文字の次の引数を取得したいです。 具体的には cat text1 Monday Tuesday Wednesday Thursday Friday Saturday Sunday cat text2 Tuesday Wednesday Thursday Monday Saturday Sunday Friday とあるときに 常に"Thursday"のあとを抜き出したいです。 text1ならFriday text2ならMonday という感じです。 抜き出すもとのファイルは、スペースのみで区切られており ファイルの大きさはランダムです。 よろしくお願いします。

  • awkで検索し、特定のフィールドを抽出する方法

    UNIX初心者です。 以下のようなデータファイル(AA.dat)から、条件を満たすデータの特定フィールドを別のファイル(BB.dat)に出力したいのです。 どのようにしたら良いのでしょうか? AA.dat(CSV形式) aaa,22,33,44,55,66,77,88,1,1,0,0,1001 bbb,22,33,44,55,66,77,88,1,1,0,0,1002 ccc,22,33,44,55,66,77,88,1,0,0,0,1001 ddd,22,33,44,55,66,77,88,1,1,0,0,1002 抽出条件(フィールド=$1~$13) $9==1 かつ $10==1 かつ $11==0 かつ $12==0 かつ $13==1002 出力するフィールド $1,$2,$4,$7,$8 出力結果 BB.dat(CSV形式) bbb,22,44,77,88 ddd,22,44,77,88

  • 行頭のn文字が重複した行を削除したい

    Windowsのコマンドラインで、テキストファイル内の重複行の削除を行いたいのですが、行全体ではなく、行の一部のみを比較して重複行を削除出来ないかと考えています。 例えば、以下の様な内容のファイルがあり、 行頭の3文字のみを比較対照とした場合、 -------------------------- aaa1 aaa2 bbb1 bbb2 bbb3 -------------------------- 以下の様な結果にしたいのです。 -------------------------- aaa1 bbb1 -------------------------- AWKやPerl、その他のコマンドでも構いませんので、どなたかご存知の方がおられましたらお教え頂けないでしょうか。

  • エクセルで特定の数値の合計を出したいと思ってます

    エクセルで特定の数値の合計を出したいと思ってます 初心者のため、わかりづらい表現があるかと思いますが、ご了承頂ければと思います。 以下のようなテーブルがあります。 A___|_ _ __B_ _ _________|_ _C_ _| 12/1| aa/taro/ccc |1540 | 12/1| bbb/hanako/ccc |1  | 12/1 | cc/taro/ddd |1540 | 12/1 | aa/yuka/ccc |6  | 12/1 | aaa/taro/bbb |209   | 12/2 | bb/taro/bbb |224  | 12/2 | cc/yuko/ccc |127   | 12/2 | bb/taro/aaa |127  | 12/2| aa/hanako/ccc |6   | 12/3| aa/taro/ccc |127   | 12/3| bbb/taro/ccc |253   | 12/3| aa/yuko/bbb |253   | 12/3| cc/hanako/ccc |16   | 12/3| aa/yuko/dd |1   | 12/3| bb/taro/ccc |16   | 12/3| aa/taro/c |6   | ~~~~~~~~~~~~~~~~~~~~~~~~~ <列の説明> A:日付 B:URL C:数値 <今回行いたいこと> 同一の日付(列A)内の行の中でURL(列B)に含まれる特定の文字を含む、数値(列C)の合計を出したいと思ってます。 例としては、 12/1のtaroを含むURLの合計値 C1+C3+C5=1540+1540+209=3289 このシートのデータは約20000件くらいありますが、最終的には下記のようなシートを作れればと思ってます。 URLにtaroを含むDailyの合計値 日付__|_合計値_| 12/1 | 455 | 12/2 | 3322 | 12/3 | 5439 | 12/4 | 2764 | 非常にわかりづらい表現で申し訳ございませんが、どなたかお力を頂ければと思います。 よろしくお願い致します。