質問: Windows上で、cygwinを動かしています。 50行から成るテキストファイルが50個あります。各ファイルの各行を取りだして、1つのファイルにまとめるにはどのようなコマンドを使えばできますか? 例でいうと下記のようになります。ファイルAとファイルBからファイルCを作成したいです。 [ファイルA] [ファイルB] 1行目 1行目 2行目 2行目 3行目 3行目 ・・・ ・・・ [ファイルC] ファイルAの1行目 ファイルBの1行目 ・・・ ご教授いただければ幸いです。よろしくお願いします。
回答: 入力ファイルにタブ文字が含まれていなくて、かつ $ echo * の結果の順番が処理すべきファイルの順番で、そのままコマンドラインに使えるなら、 $ paste * | tr "\t" "\n" >結果ファイル でいけると思います。 ファイル名が長すぎたり、入力にタブが入っている場合は下処理が必要ですね。 o ファイル名が長すぎる場合 例えば5分割して処理します。10ファイルずつファイル名を書いたリストファイルを作って、 $ xargs -a リストファイル1 paste >途中結果ファイル1 ... $ xargs -a リストファイル5 paste >途中結果ファイル5 ($ for n in {1..5}; do xargs -a リストファイル$n paste >途中結果ファイル$n; done) $ paste 途中ファイル* | tr "\t" "\n" >結果ファイル o 入力にタブ文字がある場合 入力ファイル中のタブ文字を変換しておいて、あとで戻す。 $ cat 入力ファイル1 | tr "\t" "\000" >一時ファイル1 ... $ paste 一時ファイル* | tr "\t\000" "\n\t" >結果ファイル