|
Solaris8で、Bシェル(sh)で以下のことを行いたいのですが、 良い方法を教えてください。 2つのファイルの中身を比較し、その結果を表示したいのです。 --- file1.txt ----- hanako.sato jiro.yamamoto taro.yamada taro-1.yamada tsuyoshi.saito --- file1.txt ----- jiro.yamamoto taro-1.yamada taro-2.yamada gou.yamashita 結果 file1 Only, hanako.sato match,jiro.yamamoto file1 Only,taro.yamada match,taro-1.yamada file1 Only,tsuyoshi.saito file2 Only,taro-2.yamada file2 Only,gou.yamashita と出力したいのです。 お願いします。 |
|
>>4294 hagu 案1. file1.txt を while で 1行ずつ読み込み、読み込んだ行が file2.txt に含まれるかを grep で調べる。 案2. file1.txt と file2.txt をそれぞれ sort し、diff をとって、 行頭が < か、> かを調べる。重複する行は…どうしましょうねぇ。 案3. perl でハッシュに突っ込む。3行くらいで書けそうな気がします。 |
|
>> 4295 perl使用したことありません。 書くとしたらどうなりますか。 案1ですと、file1.txtで調べたあと、file2.txtのみで存在する物も調べるので 同様の処理が必要になります。重複する行が2回でることになります。 |
|
>>4296 hagu Perl クックブック VOLUME 1 のレシピ 4.8・4.9 あたりを立ち読みして、 なんとかなりそうなら手を出してみるとよいでしょう。 > 重複する行が2回でることになります。 file2.txt を while で 1行ずつ読み込み、読み込んだ行が file1.txt に 含まれていれば何も表示しない、でいいのでは。 > 案2. file1.txt と file2.txt をそれぞれ sort し、diff をとって、 > 行頭が < か、> かを調べる。重複する行は…どうしましょうねぇ。 GNU diff があるなら (unified diff を出力できる diff があるなら)、 % diff -u -U 10000 file1.txt file2.txt として (10000 はファイルの行数を超える数)、 ・行頭が - なら file1.txt のみ ・行頭が + なら file2.txt のみ ・行頭がスペースなら重複行 ですかね。 |
|
>>4294 hagu 1.file1.txtとfile2.txtを辞書順にソートする。 2.diffコマンドで、file1.txtとfile2.txtの差異を表示する。 diffコマンドの出力結果の見方は、ご存じですよね。 ">"は、右側に指定したファイル内に差異があることを示す。 "<"は、左側に指定たファイルにある差異があることを示す。 3.grepとかcutを使用して見やすいように編集。 4.file1.txtかfile2.txtをキーにして、grepで存在する文字列だけを抽出。 で、出来ると思います。 |
|
>>4294 hagu 動作未確認ですが、こういうのはダメですかね。 sort file1 | uniq > file1-2 sort file2 | uniq > file2-2 comm -23 file1-2 file2-2 | sed 's/^/file1 Only,/' comm -13 file1-2 file2-2 | sed 's/^/file2 Only,/' comm -12 file1-2 file2-2 | sed 's/^/common,/' 順序よく並んでしまいますが。 |
|
>> 4299 ありがとうございます。 確認してみます。 |
|
>>4299 has ありがとうございます。 期待していた結果が得られました。 commというコマンドがあるのですね。 知りませんでした。 勉強になりました。 |
|
突然すみません。私は、いま卒業研究で動画像を処理しようとしてるものです。bmpファイルからppmやpgmへの一括変換はできたのですが、それらが生(raw)なので、つまりP6なので処理に困ってます。P3にしたいのですが大量のPPM、PGMをまとめてASCIIに変換することは可能でしょうか?よろしければ教えていただけると助かります。 |
|
>>4302 tana 試してませんが、ppmtogif して giftoppm で戻すとか。 |
|
giftoppmって一度に多数のファイルを変換できますか? |
|
>>4304 tana 知りませんが、もしできないとしても for i in *.ppm; do ppmtogif < $i | giftoppm > out/$i; done とか、 ls *.gif | sed 's/\(.*\)/ppmtogif < \1 | gitoppm > out\/\1/' | sh とか。 拡張子は適当に変更するということで。 |
|
blog なるものを始めてみました。 http://68user.blog27.fc2.com/ 入力が非常に面倒なのですが (HTML 手打ちと変わらない)、世の人たちは 使いこなしているんですかねぇ…。 |
|
日記を書く習慣の無い僕にとっては、blogを使う利点が未だに理解できないです。 もし、68userさんの視点でその利点を見出せたら、是非とも教えていただきたく、 宜しくお願いいたします。 追伸 FreeBSDでの活動は、今でもされているのですか? |