|
> # 見本求む。 見本かどうか分かりませんが、私は次のように書きました。 #!/usr/bin/awk -f { array[$2] = sprintf("%s %s", array[$2], $1); } END { for( key in array ){ split(array[key], tmp); if( 2 in tmp ) printf("%s %s %s %s\n", key, tmp[1], key, tmp[2]); else printf("%s %s\n", key, tmp[1]); } } 起動は % awk -f script file1 file2 としてください。連想配列に記録して、最後に出力という感じです。 ただし、次のような $2 が同じだが $1 が違う値を含む形式のデータは 仮定していません。 10 abcde 11 abcde どちらかを捨てるようになっているかと思います。実際にはデータの形式の チェックが要るかと思います。あと出力の順が不定になります。出力の 順番に依存する処理には向きません。動作チェックはしていません。 多分、本家の awk じゃ無理かな。動作チェックは gawk でやっています。 |
|
># 見本求む。 単なるバリエーションということで… #!/usr/bin/awk -f NR == 1 { f = FILENAME } f == FILENAME { hash[$2]=$1 } f != FILENAME { if ( $2 in hash ) { print hash[$2], $2, $1, $2 delete hash[$2] } else print $1, $2 } END { for (r in hash) print hash[r], r } |
|
もう他人の書いた awk スクリプトを見ても意味がわからん (笑) > Perlです。 で、どういう処理をするサブルーチンの例を見たいのですか? あと、素人とか初心者とかいうハンドルはやめてください。 それから、誰に向けて言うわけでもないですが、回答をもらっても 返事をする気がないなら、最初から質問しないでね。 |
|
沢山の回答、どうもありがとうございます。 あとお礼が遅くなってどうもすいません。 試してみてから出そうと思っていたのですが、家にUNixがないので 月曜になってしまいます。 このページを発見して間もないのですが、これから色々質問することもある思うので、その時はまたよろしくお願いします! |