• 締切済み

シェルで特定文字を含む行を検索しファイルへ出力する

シェル初心者でどのように処理をしていいか悩んでいます。 ■入力ファイル(ファイル名 test01.txt) レコード長 20byte --- PPP111100001AAAQQQCC PPP111100002AAAQQQCC PPP111100003AAAQQQCC PPP120000001AAAQQQCC PPP120000002AAAQQQCC PPP122200001AAAQQQCC PPP133300001AAAQQQCC PPP111100004AAAQQQCC --- 上記ファイル内容の4桁目~7桁目が「1111」の行を 抽出し別のファイルに出力したいです。 □実行結果イメージ ■出力ファイル(ファイル名 test02.txt) レコード長 20byte --- PPP111100001AAAQQQCC PPP111100002AAAQQQCC PPP111100003AAAQQQCC PPP111100004AAAQQQCC --- どうぞよろしくお願い致します。

みんなの回答

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.3

grepをパイプでファイルに出力する。 $ grep "^.\{3\}1\{4\}" test01.txt >> test02.txt または $ grep "^.\{3\}1111" test01.txt >> test02.txt

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

せめてgrepは使えます? grep '^.\{3\}1\{4\}' test01.txt>test02.txt

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1
nociw_0v0
質問者

補足

情報が足りなくて申し訳ありません。 またご丁寧にリンクをありがとうございます。 (大変助かりました!) シェル→sh sed→使えないようです どうぞよろしくお願いいたします。

関連するQ&A

  • ファイルの3行目までを出力したい

    Perl初心者です。 test.txtというファイルがあって、その中の1行目から3行目までを 出力したい場合はどうしたらいいでしょうか? open(FILE,"test.txt") || die "Open Error.\n"; @data = <FILE>; close(FILE); foreach (@data) { print $_; } これだと、ファイルの中身が全て出力されてしまいます。

    • ベストアンサー
    • Perl
  • grepによる文字列検索のシェル作成の手順

    Solaris9のOSにて、以下の仕様のシェルを作成したいと思っています。 特定のディレクトリ配下にある全てのファイル内で特定の文字列「abc」のある行を抽出し、ファイル化したい。 (検索対象が1ファイルであれば、grep -n abc test.txtでよいですが、ファイル名がたくさんある場合のシェルの作り方がわかりません。) また、どのファイルから検索したのかがわかるように抽出した行の前にファイル名をつけられると大変助かります。 例) ---test1.txtから検索--- 8:XXXXabcXXXX 11:XXXXabcXXX ---test2.txtから検索--- 10:XXXXXXXXabcXX お手数ですが、宜しくお願いします。

  • シェルでファイルから1行づつ読み出す。

    ファイルから1行づつ読み込んで 変数に格納する方法がわかりません。 具体的に言うと・・・ ユーザIDが詰まった(1行に一人分)ファイル user.txt を1行づつ読みこんでいき、 ユーザアカウントをチェックするプログラム user_chk に引数として渡して行きたいと思っています。 簡単だと思っていたのですが、 さっぱりわかりません。 Cシェルを使用していますが、 Bシェルでもかまいません。

  • シェルで外部ファイルを取り込む方法

    こんにちわ。 既存のテーブルに新規にレコードを追加するシェルを作って おります。 今回は、test.txtに追加項目を記入しておき $test.sh test.txt と実行することで処理を行っております。 今後の運用を考えて $test.sh と実行するだけでレコードが追加されるようにしたいと 思うのですが、test.shにtest.txtの内容を取り込んで使用 するにはどのように記述すればよいのでしょうか? 「現在の設定」 -test.sh---------------- #!/bin/sh (定義等) insert into ○○○ ( key1 key2 ) values ( '${key1}', '${key2}' -test.txt--------------- key1=12345 key2=日本 どなたかご教授いただけますと幸いです。 以上、よろしくおねがいいたします。

  • ファイル内の改行を削除し1行にするシェル

    お世話になっております。 ファイル(テキスト)内には、改行を含んだ複数の行が記述されています。 これを1行にして上書き保存するシェルを実行をするための シェルを作成したいと思っています。 ファイル内には以下のような値が改行を含んで入っています。 123 456 789 →これを、「123456789」と改行を取り除き、既存のファイルの上書き保存をしたい なお、改行を含んだ対象のファイルは、ファイル名にある文字を含む ファイルのみに対して行いたいのですが。 例:ファイル名に、「*abc*」、「*def*」、「*xyz*」を含むファイルが対象 改行を取り除くコマンドはわかるのですが、シェルにするプロセスがわかりません。 cat 入力ファイル名 | tr -d '\n' > 変換後の出力ファイル名 ご教授いただきたく、よろしくお願いします。

  • ファイルから特定の行を出力したい

    あるファイルの特定の一行だけを取りだすunixの コマンドを教えて下さい。 具体的には cat a.txt 1gyoume 3gyoume 4gyoume 5gyoume 6gyoume 7gyoume 8gyoume といったファイルの末尾からX行目の内容を変数に入れたいのです。 a.txtが8行あると判断して8-X行目でファイルを分割、そのファイル をtailコマンドで末尾1行目だけ出力すると出来そうだと思ってい るのですがもっと簡単な方法はないでしょうか。

  • シェルスクリプト(Bash偏)の実行ファイルに関するご質問があります。

    シェルスクリプト(Bash偏)の実行ファイルに関するご質問があります。 ファイル名を変更するシェルスクリプトをbashで行おうとプログラムを作成したのですが、 実行するとbad interpreter: ディレクトリではありません とメッセージが出て終了します。記述に誤りがあるのか、実行の仕方が悪いのか分かりません。教えて下さい。 シェルの記述内容は ファイル名をtest.sh #!/bin/bash/ -f mv A.txt A.ori exit 実行方法として #>chmod x+a test.sh #>./test.sh で行いました。そうしたら、bad interpreter: ディレクトリーではありません とメッセージが出ます。 ちなみに #>. test.sh で実行するとターミナルがシェルの実行と同時に閉じてしまいますが、シェルを実行したディレクトリーを確認すると、処理が終わっておりました。

  • UNIX のシェル 文字の置換について

    シェルでファイルの文字列を置換したいです。 /*~*/のコメントの文字なので、1行数を変えたくないです。 ─────────────────────────── ※1文字分の空白を「_」で表示します。 test.txtファイルの「XXXXX」を「aa___」に置換する。 ─────────────────────────── 【test.txt 置換前】 /**************/ /*_XXXXXYYYYY_*/ /**************/ 【シェルの内容 test.sh】 #!/bin/csh set IN_henkan = `printf "%-5s" $1` perl -i -p -e 's/XXX/'$IN_henkan'/g' test.txt 【シェルを実行】 test.sh aa 【test.txt置換前 希望する状態】 /**************/ /*_aa___YYYYY_*/ /**************/ 【test.txt置換前 実際の状態】 /**************/ /*_aa_YYYYY_*/ /**************/ ─────────────────────────── 「aa」の後ろに1文字分の空白しか挿入されないです。

  • シェル ディレクトリ内検索について

    お世話になっております。 solarisでシェル作成に辺り教えてください。 あるディレクトリの新しいファイルから3つ目の ファイルを移動(mv)したいと考えているのですが 良い方法は無いでしょうか? 例 testディレクトリ内 ファイル.txt.051025 ファイル.txt.051024 ファイル.txt.051023  ←このファイルをmv処理 ファイル.txt.051022 ファイル.txt.051021 ファイル.txt.051020 ディレクトリ内のタイムスタンプで最も新しいファイルから3つ目を移動させたい場合は、どの様にしたら良いでしょうか?方法はあるのでしょうか? お願いします。

  • ファイルを行ごとに比較するシェルスクリプトについて

    ファイルを行ごとに比較するシェルスクリプトをご教授ください。 例えば(master.txt)(a.txt)(b.txt)(c.txt)(ok.txt)(ng.txt)と4つのファイルがあり、 (master.txt)と(a.txt)の行を比較し(a.txt)の中のある行が(master.txt)の行と一致した場合(ok.txt)に (master.txt)の行と一致しなかった場合(ng.txt)に入れる。 その後(master.txt)と(b.txt)の比較し(a.txt)が使用したものと同じ(ok.txt)or(ng.txt)に入れる・・・ といったように繰り返していくシェルスクリプトはどのようにして作成するのでしょうか? txtファイルの中の行はランダムに入っており、x.txtの一行一行ををmaster.txtの全行と比較する必要があります。 自分で作ってみたものは、while文を2重で使い一行ずつ取り出しcase文で行が一致した物を(ok.txt)に入れる 所までは成功しているのですが、複数回繰り返す時にどのようなロジックで不一致行を(ng.txt)に入れる ことができるのかが考え付きませんでした。 よろしくお願いいたします。

専門家に質問してみよう