Shellscriptを使ってファイルの内容をチェックし、仕分ける方法
- 仕事でファイルの内容をチェックして別々のファイルに仕分ける方法を、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 と 正規表現を使ってうまくいくのかと考えていますが、 前に進めません。 宜しくサジェスチョンをお願い致します。
- Solaris系OS
- 回答数2
- ありがとう数2
- みんなの回答 (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 -- これだけでいいのでは? なお、タブ文字も検索したいのであれば処理系がどのメタ・キャラを使えるか確認する必要があります。 補足.今回重要なのはタブ文字で区切られているかどうかではなく行の性質(どんな文字がどのように含まれるのか)です。
その他の回答 (1)
- osyo3
- ベストアンサー率56% (35/62)
もう少し教えてください。 ・60と15の、それぞれの登場回数は決まっていますか。 ・60と15が両方登場する行はありますか。 ・aやbやcは文字数などが決まっていますか。 上記のファイルだけならおそらくgrepを使ったほうが早そうだと思うのですがどう思われますか。 真剣に答えようと思っていますので、拙い私にもう少し情報を下さい。 宜しくお願いいたします。
補足
ありがとうございます。 小生、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 サジェスチョンをお願い致します
- ベストアンサー
- Solaris系OS
- あるファイル内容をまとめるシェルについて
お世話になっております。 あるファイル内容を1つのファイルにまとめて出力する方法はあるのでしょうか? 例: ファイル名:TEST1 aaaa ファイル名:TEST2 bbbb ファイル名:TEST3 cccc 上記ファイルをtest001に出力する。 ファイル名:tast001 aaaa bbbb cccc とこのようなシェルは可能でしょうか? ご教授願います。
- ベストアンサー
- Solaris系OS
- 参照ファイルを用いて、複数のテキスト置換を一括で行
参照ファイル(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 まず、これが動きません。 宜しくお願い致します。
- ベストアンサー
- Solaris系OS
- 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の参照が適当ではない、と言うものです。 宜しくお願い致します。
- ベストアンサー
- Solaris系OS
- ファイル中の数行を抜き出す処理について(シェル)
ファイル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 ご教授のほど、宜しくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
お礼
うまく行きました。ありがとうございます。 grepの使い方がわかりました。 これで行きます。 今後とも、宜しくお願いいたします。