• ベストアンサー

ある列をキーにして、複数行を1列で出力したい

AWKで、以下の処理をしたいです。 ・1列目をキーにしたテーブルを作る ・1列目共通で2列目が複数ある場合は、並べて記載したい。 どなたか、スクリプト案お願いします。 例 Input file A あ B あ B い C い Output file A あ B あ/い C い

  • wiket
  • お礼率60% (3/5)

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

  • ベストアンサー
  • trapezium
  • ベストアンサー率62% (276/442)
回答No.1

awk '{a[$1]=a[$1]"/"$2} END{for (i in a){sub("^/","",a[i]); print i,a[i]}}' file 結果はソートされてないので、必要ならあとで | sort してください。

wiket
質問者

お礼

無事処理できました。 ありがとうございました!!

関連するQ&A

  • 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 :

  • awkで項目番号ごとに行を列に並べる

    [入力ファイル] a  10   1 b  10   2 c  10   3 d  10   4 a  20   5 b  20   6 c  20   7 d  20   8 a  30   9 b  30   0 c  30   1 d  30   2 を、2列目の項目番号を行、1列目の記号を列として (エクセルのピボットテーブルのようなイメージです) 以下のように並べ替えたいのです。 [出力ファイル] No.  a  b  c  d 10  1  2  3  4 20  5  6  7  8 30  9  0  1  2 これをawkスクリプトで書きたいのですが、 どのように書けばよいでしょうか? ※下記2点は希望ですが、難しければ非対応でも大丈夫です。  ・入力ファイルの1行目は一応abcdの順番にきれいに並んでいるものですが   順番がabdcなどとずれていても処理できるスクリプトにしたいです。  ・出力後のabcdの列順序は、スクリプトを修正することで   自由に変更できるとさらに助かります。 教えてください。 よろしくお願いいたします。

  • リストファイルに一致する個数のカウントについて

    以下にリストファイルと、インプットファイルがあります。 リストファイルのそれぞれにインプットファイルの中で何個一致するかを出力させたいです。 目的にかなうawkや perlなどのスクリプトを教えてほしいです。 list.txt a b c d ・・ input.txt 1 a b c 2 a d 3 4 b c ・・ output.txt a 2 b 2 c 2 d 1 ・・

  • 2つのファイルを結合してファイルを出力する方法

    以下のような二つのファイルがあるとします。 1_input.csv: num,cap 1,A 2,B 3,C 4,D 5,E 2_input.csv: num,sma 2,a 2,b 4,c 5,d 5,e この2つのcsvファイルからnumを比較して同じ値の時に列を追加するような以下のファイルを作りたいです。 output.csv: num,sma,cap 2,a,B 2,b,B 4,c,D 5,d,E 5,e,E awkなどを使って一列目を比較してpasteで結合などを考えましたが知識不足でうまくできない状況です。どなたかご教授いただけませんでしょうか。よろしくお願いします。

  • 二つのファイルから条件に一致する行を抽出

    AとBの二つのファイルがあります。 Aの2列目3列目の間に存在するBの2列目のファイルを抽出してCのファイルを作成したいです。 awkのifでチマチマ作ればできるとは思うのですが、他に簡単にできる方法はないでしょうか? awkだけでなくperlやpythonなどでも問題ないです。 <A> A 10 20 B 30 40 C 50 70 D 90 110 <B> あ 15 い 25 う 55 え 75 お 95 <C> あ 15 う 55 お 95

  • Excel2007での複数のキーを使った並べ替え

    Excel2007で複数のキーを使った並べ替えの挙動ですが、期待通りの結果が得られません。 例 2 A県 1 B県 3 A県 2 B県 1 A県 1 C県 のようなデータがあり、2列目を優先キーとして昇り順、1列目を次のキーとして昇り順に並べ替えを行い、以下のような回答を得ることを期待しているのですが、 1 A県 2 A県 3 A県 1 B県 2 B県 1 C県 どうも2つ目のキーが無視されているようです。 これは「仕様」なのでしょうか。 なお、ファイルは新形式でセーブされているものです。

  • エクセルで列を複数行にしたいのですが

    注文表を商品ごとに集計したいのですが、商品名・数が列の入っています。これを縦にして集計しようと思っているのですが、列を行する方法を教えてください。 エクセルの表で列A・Bを共通にして列C・Dを次の行に、そして列E・Fを次の行にとしたいのですが、教えてください。 列A 列B   列C  列D 列E 列F 001 ○○会社 商品A 10  商品F 14 001 ○○会社 商品C 11  商品A 20 005 ××会社 商品D 32  商品C 25 これを 列A 列B   列C  列D 列E 列F 001 ○○会社 商品A 10  001 ○○会社 商品F 14  001 ○○会社 商品C 11  001 ○○会社 商品A 20  005 ××会社 商品D 32  005 ××会社 商品C 25 よろしくお願いいたします。

  • Excelでキーを使って関数で列を行に変更したい

    Excelで下記の事を関数で行うことが出来るでしょうか?方法を知っている方がいましたらお教えください sheet1    A B   1 1 33  2 1 33  3 1 34  4 1 45  5 2 21  6 2 25  7 2 25  sheet2    A  B  C  D  E   1  1  33 33 34 45 2  2  21 25 25 Sheet1の状態のキーをA列とした場合に、 Sheet2でキーをA列に入力後 B1 C1 D1 E1 に 関数を使って列でまとまっているデーターを 行にする方法が分かる方、お教え願います。 (Sheet2の B1 C1 D1 E1に入れる関数の 組み方が分からないと言うことです。 また、マクロはわからないので><) よろしくお願い致します。

  • ネストされた配列からのCSV出力の方法

    はじめまして。 勉強中のRuby(2.0)で、 以下のようにCSVファイルの書式変換をしようとしています。 ■変換前 # 入力ファイル1(input1.csv) A, B, C, D A1,B1,C1,D1 A2,B2,C2,D2 A3,B3,C3,D3 # 入力ファイル2(input2.csv) B C ■変換後(output.csv) B, C, A, D B1,C1,A1,D1 B2,C2,A2,D2 B3,C3,A3,D3 ■変換内容 入力ファイル1に対して、入力ファイル2で指定された文字をヘッダーにもつ列を 順次先頭に移動していき、それを、出力ファイルとする。 ■経緯 いろいろ試行錯誤をしながら、以下のような配列(output_ary)を 作るところまではできたのですが、 これをcsvに書き出す術がわからずにおります。 (カッコやダブルコーテーションがついたままになったり、 改行がされなかったり..) (pp output_ary の結果) pp output_ary #=> [["B1","C1","A1","D1"], ["B2","C2","A2","D2"], ["B3","C3","A3","D3"], ["B4","C4","A4","D4"]] お手数ですが どなたかご教示ください。 もちろん、「上記 output_ary のようなモノを作らなくてもこうすればできるよ」というご回答でもOKです。 よろしくお願いいたします。

    • ベストアンサー
    • Ruby
  • エクセルで複数の列から複数の文字列(数字)を選びたいです。

    エクセルで複数の列から複数の文字列(数字)を選びたいです。 A   B   C   D   E   F   G   H 1   12   1   4   5   8   6 2   36  7   2   5   6 3   55  3   4   88  1  3  8 5   87 上記のような表があったとき、C列からG列のいずれかに1、3、8のどれかが 含まれるとき、H列にB列の数字を入れたいのですが、どのようにすれば できるのでしょうか? この場合、A列の1,3,4段にそれぞれ12、55、88と入れたいということです。 よろしくおねがいいたします。

専門家に質問してみよう