こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

awkを用いた複数ファイルのフィールドの結合方法

お世話になります。
gawkを使用しているのですが、

File1.dat File2.dat ・・・といった固定フィールドで行数は同一の2つ以上のファイルから特定のフィールドをそれぞれ抜き出し、1つのファイルへ出力する といったスクリプトの作成方法が分からず困っています。

ex--File1.datの$1と$3
1996 1 2
1996 1 3
1996 1 4

ex--File2.datの$4
90 500 11 33 0
94 445 18 71 0
85 512 29 68 0

ex--hoge.out
1996 2 33
1996 3 71
1996 4 68

いままで1つのファイルから切り出ししかせず勉強不足もあってお手上げ状態です。どなたかご存知の方いらっしゃいましたら宜しくお願いします。

投稿日時 - 2007-01-16 21:11:45

QNo.2671234

困ってます

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

No.1です。うまくいきませんでしたか…。私の環境ではうまくいったのですが。

こういう方法はいかがでしょうか。
paste File1.dat File2.dat | gawk '{print $1,$3,$7}' > hoge.out

投稿日時 - 2007-01-16 22:10:43

補足

度々とんでもない恥ずかしい勘違いをしておりました。

File1.dat(フィールド数)File2.dat(フィールド数)
連続のフィールドとして扱えば解決しました、どうもありがとうございます。

投稿日時 - 2007-01-16 23:22:15

お礼

ありがとうございます、出力できました。
こちらの方法では 1番目のファイルのフィールド数が2番目ファイルのフィールド数より少ない事が前提のようですね。
どうにかしてフィールド数が同じ場合や入力順番が逆の場合でも動作するよう工夫してみます。

投稿日時 - 2007-01-16 23:15:43

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

gawk '{n1=$1;n2=$3;getline < "File2.dat";n3=$4;print n1,n2,n3}' File1.dat > hoge.out

でいかがでしょうか。

投稿日時 - 2007-01-16 21:28:24

補足

失礼しました、先に書いた実行結果は間違いです。
1996 2
1996 3
1996 4

投稿日時 - 2007-01-16 21:46:26

お礼

ご意見ありがとうございます。
一旦変数に投げる形は私も試したのですが、出力結果が片方のファイル(ham_kamo様の例の場合File1.dat)のフィールドのみ抽出されてしまうようです。

実行結果--hoge.out
90 11 33
94 18 71
85 29 68

投稿日時 - 2007-01-16 21:45:40