Shellscriptを使ってファイルの内容をチェックし、仕分ける方法

このQ&Aのポイント
  • 仕事でファイルの内容をチェックして別々のファイルに仕分ける方法を、Shellscriptを使って実現するための方法を教えてください。
  • 与えられたファイルの内容をチェックして、特定の条件に基づいてファイルを仕分ける方法についてのShellscriptの組み方を教えてください。
  • Shellscriptを使用して、ファイルの内容をチェックし、それに応じてファイルを異なるカテゴリに仕分ける方法を教えてください。
回答を見る
  • ベストアンサー

内容によって2つのファイルに分ける(shellscript)

仕事で、ファイルの内容をチェックして別々のファイルに仕分けることが必要になりました。どのようにshellscriptを組めばよいでしょうか? fileの内容 (注:\tはタブを示す) aaa1 \t bbbb \t 60 \t cccc \t 60 \t sssss aaa2 \t bbbb \t 15 \t cccc \t 15 \t sssss aaa3 \t bbbb \t 60 \t cccc \t 60 \t sssss aaa4 \t bbbb \t 15 \t cccc \t 15 \t sssss aaa5 \t bbbb \t 60 \t cccc \t 60 \t sssss aaa6 \t bbbb \t 15 \t cccc \t 15 \t sssss 60 \t .* \t 60を含むものは test_60.txtに集め 15 \t .* \t 15を含むものは test_15.txtに集めたいのです。 sed と 正規表現を使ってうまくいくのかと考えていますが、 前に進めません。 宜しくサジェスチョンをお願い致します。

noname#95859
noname#95859

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

  • ベストアンサー
  • osyo3
  • ベストアンサー率56% (35/62)
回答No.2

遅くなって申し訳ない。 shellscriptですね。コマンドラインでまず試してみてください。 grep 60 file_name aaa1 \t bbbb \t 60 \t cccc \t 60 \t sssss aaa3 \t bbbb \t 60 \t cccc \t 60 \t sssss aaa5 \t bbbb \t 60 \t cccc \t 60 \t sssss grep 15 file_name aaa2 \t bbbb \t 15 \t cccc \t 15 \t sssss aaa4 \t bbbb \t 15 \t cccc \t 15 \t sssss aaa6 \t bbbb \t 15 \t cccc \t 15 \t sssss という結果が得られると思います。もう少し条件が複雑であればそれなりのやり方がありますが、今まで頂いた情報からだとこれだけでいけそうですね。 -- #/usr/bin/sh /usr/bin/grep 60 /path/file_name > test_60.txt /usr/bin/grep 15 /path/file_name > test_15.txt -- これだけでいいのでは? なお、タブ文字も検索したいのであれば処理系がどのメタ・キャラを使えるか確認する必要があります。 補足.今回重要なのはタブ文字で区切られているかどうかではなく行の性質(どんな文字がどのように含まれるのか)です。

noname#95859
質問者

お礼

うまく行きました。ありがとうございます。 grepの使い方がわかりました。 これで行きます。 今後とも、宜しくお願いいたします。

その他の回答 (1)

  • osyo3
  • ベストアンサー率56% (35/62)
回答No.1

もう少し教えてください。 ・60と15の、それぞれの登場回数は決まっていますか。 ・60と15が両方登場する行はありますか。 ・aやbやcは文字数などが決まっていますか。 上記のファイルだけならおそらくgrepを使ったほうが早そうだと思うのですがどう思われますか。 真剣に答えようと思っていますので、拙い私にもう少し情報を下さい。 宜しくお願いいたします。

noname#95859
質問者

補足

ありがとうございます。 小生、shellscriptに関して、本当に初心者です。 a,b,c等は、こんな感じというだけで、大切なことはタブで区切られて いることだけです。 >・60と15の、それぞれの登場回数は決まっていますか。 一行の中で、一度だけです。   aaa1 \t bbbb \t 60 \t cccc \t 60 \t sssss >・60と15が両方登場する行はありますか。 15---15,60---60だけです。 15---60,60---15の組み合わせはありません。 >・aやbやcは文字数などが決まっていますか。 a,b,c---- 文字数は決まっていません。   多くは英数ですが、時として internetのアドレスであったりします。(特殊文字もあり) grepを使うとした場合、どのようにすればよいのですか? 宜しくお願いいたします。

関連するQ&A

  • RedHatのShellScriptについて

    初めて投稿します。よろしくお願いします。 RedHat7.0でShellScriptを作成しています。 初めて作るのでよくわかっていません。 下記スクリプトを実行すると、 ./test.sh:aaa:command not found とエラーになります。 原因がおわかりの方、アドバイスをいただけないでしょうか。 よろしくお願いいたします。 ******test.shの内容***************** #!/bin/bash . /tmp/test.txt para=$1 export para echo $para ************************************ ***test.txtの内容******************* aaa *********************************** ********やりたい事***************** 変数paraにtest.txtに定義されている値を 代入して表示したい。 ********************************** 権限はどちらのファイルも chmod 777 test.sh chmod 777 test.txt に設定してあります。 回答よろしくお願いいたします。

  • ShellScriptの組み方3

    お世話になります。 数字をピックアップしようとしているのですが、どうもうまくいきません。 数字は 400 ----> aaa 500 ----> bbb x4xx ---> aaa x5xx ---> bbb 5xxxx -> ccc これに対し、下記のように組みましたが、変換できませんでした。 sed -e 's#^4\d\d#aaa#g' motemp98 >> motemp99 sed -e 's#^5\d\d#bbb#g' motemp98 >> motemp99 sed -e 's#^\d4\d\d#aaa#g' motemp98 >> motemp99 sed -e 's#^\d5\d\d#bbb#g' motemp98 >> motemp99 sed -e 's#^5\d\d\d\d#ccc#g' motemp98 >> motemp99 サジェスチョンをお願い致します

  • あるファイル内容をまとめるシェルについて

    お世話になっております。 あるファイル内容を1つのファイルにまとめて出力する方法はあるのでしょうか? 例: ファイル名:TEST1 aaaa ファイル名:TEST2 bbbb ファイル名:TEST3 cccc 上記ファイルをtest001に出力する。 ファイル名:tast001 aaaa bbbb cccc とこのようなシェルは可能でしょうか? ご教授願います。

  • 参照ファイルを用いて、複数のテキスト置換を一括で行

    参照ファイル(list.txt)を用いて、一括でファイルの中身(test.txt)を置換したいです。以下のようにワンライナーで書いたのですが、以下のようなエラーが出ました。 使っているのはMac Os10.15.5です。 何か問題があるのでしょうか? 間違っている点があれば教えていただきたいです。 sed 's/\([^\t]*\)\t\(.*\)/s|\1|\2|g/' list.list | xargs -I{} sed -i '{}' test.txt sed: 1: "/Users/owner/Desktop/DI ...": invalid command code o sed: 1: "/Users/owner/Desktop/DI ...": invalid command code o <list.txt> AAA aaa 111 222 abc efg ....

  • ShellScriptでのsed

    いつもお世話になります。 今、仕事でShellscriptを組んでいるのですが、どうもうまくいきません。サジェスチョンをお願い致します。 データ '2007/02/08-00:00:09', 0, 0, 0, 欲しい結果 2007/02/08 00:00:090\t0\t0\t 1. date と timeの間の - をスペースに置き換える 2. シングルコートを削除する 3. ,スペースをタブに置き換える iには、ファイル名が入っています。 sed -e "s/\-\(\d\d\:\d\d\:\d\d\)/ \1/" $i > work.dat まず、これが動きません。 宜しくお願い致します。

  • SEDの使い方

    こんにちは。 sedである複数行のパターンにマッチしたら置き換えるということをしたいのですが上手くいきません。 たとえば、 test.txt aaa bbb ccc に対して、 sed -i.bak s/aaa/aaa'\n'111/g test とすると、 test.txt aaa 111 bbb ccc となります。 これを戻す方法として、 sed -i.bak s/aaa'\n'111/aaa/g test としても、元に戻りません。 sedを用いで元に戻す方法をご教示いただけないでしょうか。 よろしくお願い致します。

  • PHP 読み込んだファイルのブラウザ表示につい

    読み込んだTXTファイルの内容をブラウザに表示したいと思っています。 TXTファイルには aaaa bbbb cccc が入っています。 読み込んだデータを <?php $data = fopen("test.txt","r"); fpassthru($data); ?> でブラウザに表示しようとすると {\rtf1\ansi\ansicpg932\cocoartf1038\cocoasubrtf350 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \paperw11900  ~ 省略 ~  \cf0 aaaa\ bbbb\ cccc} と最後にTXTの中身がありますが、余計なものも一緒に表示されてしまいます。 aaaa bbbb cccc と表示させるにはどうすればよいでしょうか?

    • ベストアンサー
    • PHP
  • sed コマンド

    sedを使って、行の中の単語を修正しようとしています。うまくいきません。サジェスチョンをお願いできますか? やりたいこと:  (tab) xxxxx01 (tab) --->(tab) xxxxx01_aaa (tab) (tab) xxxxx02 (tab) --->(tab) xxxxx02_aaa (tab) (tab) xxxxx03 (tab) --->(tab) xxxxx03_aaa (tab) sed -e 's/ xxxxx0(\d) / xxxxx0\1_aaa /' file.txt > file2.txt エラーメッセージは、\1の参照が適当ではない、と言うものです。 宜しくお願い致します。

  • ファイル中の数行を抜き出す処理について(シェル)

    ファイルaaa.txtの2行目から4行目を抜き出し、 ファイルbbb.txtに格納する方法として、 sed -n '2,4p' aaa.txt > bbb.txt がありますが、 変数を使用し、 start=2 end=4 sed -n '${start},${end}p' aaa.txt > bbb.txt とすると、エラーが発生します。 どうすればよろしいのでしょうか。

  • コマンドプロンプトでのファイル操作について

    コマンドプロンプトでのファイル操作について、ご存知のかたどうか教えてください。 a.txt b.txtという2つのファイルがあるとします。 <a.txtの内容> 1111 2222 3333 <b.txtの内容> aaaa bbbb cccc 上記の2つのファイルを読み取りc.txtというファイルへ以下のように 出力したいのですが、コマンドプロンプト(batでも問題ありません) にてできるのでしょうか? <c.txtの内容> 1111,aaaa 2222,bbbb 3333,cccc ご教授のほど、宜しくお願いします。