• ベストアンサー

awkを使って文字列処理の問題

awkで以下のことをやりたいですが、 a.txtの中身は aaaa bbbb cccc の三つのレコードがあります。 b.txtの中身は 東京a 埼玉b 千葉c 東京d になってます。 ファイルa.txtのみっつのレコードのを読み込んできて、b.txtに対して検索して、東京 という文字列があれば、そのレコードは、aaaaに置き換えて、あるファイルに出力する ようなスクリプトを書きたいです。 どう書けば、いいですか?教えていただけませんか?

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.1

b.txtの「東京」を「aaaa」に変えるなら、 awk '{gsub("東京","aaaa");print}' b.txt ですが、それとa.txtはどういう関係があるのですか?

ikutame
質問者

補足

返事ありがとう! a.txtのデータを一回保存しておいて、 変換しようとするファイルには、"東京"があれば、 aaaaに置き換えれ、埼玉をbbbbに、千葉をccccに置き換える プログラムを書きたいですが、 そうするなら、どうすれば、いいですか?

その他の回答 (1)

  • iriyak
  • ベストアンサー率48% (40/82)
回答No.2

こんにちは。 a.txt と b.txt の行間の関係の提示は可能でしょうか?? 提示したデータでは、目的を達成できず、不十分のように回答者には見えます。 (理由) a.txt は 1列で構成される行が格納されている b.txt は 1列、2列で構成される行が格納されている b.txt の 1列目が『千葉』と等しい場合に、何をもって a.txt の『cccc』に置き換える判断をするのか。b.txt の 2列目『c』は『cccc』とも一致しないので判断材料に使用できないようです。質問者の提示したデータでは、目的を達成することができないようにみえます。

関連するQ&A

  • 以下の様なファイルの中身から重複を取り除いて表示したいのですが、

    以下の様なファイルの中身から重複を取り除いて表示したいのですが、 awk 'NR==1||prev!=$0;{prev=$0}' file.txt の使い方を教えてください。 何故、重複を除いて表示できるのですが。 printなどを使っていないのに表示ができているのですか。 file.txt 以下中身 ---------------------- AAAA BBBB BBBB CCCC CCCC ----------------------- ↓ AAAA BBBB CCCC の3文字のみを出力したい。

  • uniqとループを使用しないで、文字列のフィルターの方法

    表題の件にて、質問です。 bashでshを作成しています。いろいろ試しているのですが、 UNIXのコマンドで、uniqコマンドがありますが、それと同じことをsed又は、awk等を使用して、作成することは可能でしょうか? 作成が可能であれば、記述方法を教えてくださいませ。 ※ループ文を使用しないで、出来るだけ完結なコマンド文にしたい。 例: file.txt 以下中身 ---------------------- AAAA BBBB BBBB CCCC CCCC ----------------------- ↓ AAAA BBBB CCCC の3文字のみを出力したい。 ご存知の方いらっしゃいましたら、ご教示ください。

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

    コマンドプロンプトでのファイル操作について、ご存知のかたどうか教えてください。 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 ご教授のほど、宜しくお願いします。

  • 重複の場合は1件のみ取込む処理

    カラムA,Bの値がそれぞれ 1レコード目AAAA,BBBB 2レコード目cccc,BBBB 3レコード目cccc,CCCC ここでselect distinct A,B from xxxxとすると 3レコードが取れますが、カラムAの値が同じならそれは重複したものとして1,2レコードだけを取り出す用法はありますか?

    • ベストアンサー
    • MySQL
  • UNIXで文字列分割

    UNIXでマルチバイトの文字列で分割したいです。 例) aaaa bbbb cccc dddd eeee ffff ↓ [bbbb]で分割 [1]aaaa [2] cccc dddd eeee ffff できればawkで処理をしたいと考えています。

  • ファイルの最後に文字列挿入

    複数テキストファイルの最後に、固定の文字列(1行)を追加したいのですが、batファイルで行う場合は、どのようにすれば良いのでしょうか? 例) AAAA.txt BBBB.txt CCCC.txt (ファイルの中身はそれぞれ異なるが拡張子は同じ)3つのファイルの最後に、 XXXXX=YYYY+ZZZZZ という1行を追加したい。 お手数をおかけします。よろしくお願いいたします。

  • awkで、該当するデータを抽出する方法

    データを読み込み、処理日より1週間以内に該当するデータのみ出力したいのですが、awkの組み合わせで可能でしょうか? 処理日は、毎日起動するため変更となります。 記述例を書いていただければ、非常に助かります。 宜しくお願いいたします。 (仮処理日) 2003/6/13 (入力データ) 1 aaaa 100 15-Jun-2003 2 bbbb 200 16-Jun-2003 3 cccc 300 18-jul-2003 4 dddd 400 30-jul-2003 (出力結果) 1 aaaa 100 15-Jun-2003 2 bbbb 200 16-Jun-2003

  • awkで複数ファイルのある列を抽出し出力したい

    awkプログラミングの初心者です。 今、複数ファイル(1000ファイル)から、それぞれある列(すべて同じ列番号)のデータを抜き出して、1つのファイルに出力したいと考えています。 具体的には、1列目に共通項、2列目以降に1000ファイル分の抽出された列を、合計1001列となるような1つのファイルとして出力したいと考えております。 awkを使って出力するには、どのようなスクリプトを作ればよいか教えていただけませんでしょうか。 <イメージ> 元となるファイル(例えば下記のように3ファイル、実際には1000ファイル)があります。 file1.txt: 1  10 2  15 3  17 :  : 1000  25 file2.txt: 1  5 2  40 3  22 :  : 1000  17 file3.txt: 1  9 2  20 3  16 :  : 1000  32 出力後のファイルイメージ: 1  10  5  9 2  15  40  20 3  17  22  16 :  :  :  : 1000  25  17  32 ちなみに、自分で作成したawkスクリプト(下記)では、上記出力後のイメージとは異なり、 縦にデータが結合されてしまいました。 awk `{print $2}` ./file*.txt > Output.txt 出力後のファイル: 10 15 17 : 25 5 40 :

  • 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
  • 文字列の出力

    C言語を使用しています。C初心者で分からないことがたくさんあって困っています。 文字列で"AAAABBBBCCCCDDDD"というのを出力する時に AAAA BBBB CCCC DDDDのようにスペースで区切って出力するにはどのようにしたらよいのでしょうか?

専門家に質問してみよう