• 締切済み

Unixのコマンドについて

Windows上で、cygwinを動かしています。 50行から成るテキストファイルが50個あります。各ファイルの各行を取りだして、1つのファイルにまとめるにはどのようなコマンドを使えばできますか? 例でいうと下記のようになります。ファイルAとファイルBからファイルCを作成したいです。 [ファイルA]   [ファイルB] 1行目      1行目 2行目      2行目 3行目      3行目 ・・・        ・・・ [ファイルC] ファイルAの1行目 ファイルBの1行目 ・・・ ご教授いただければ幸いです。よろしくお願いします。

みんなの回答

  • geshon
  • ベストアンサー率61% (44/72)
回答No.6

#4です。 ごめんなさい。質問の意味を間違えていました。 以下の1行で済みます。 $awk '(max<FNR){max=FNR}{L[FNR]=sprintf("%s%s\n",L[FNR],$0)}END{for(i=1;i<=max;i++)printf L[i]}' {ファイルA} {ファイルB} .... > {ファイルC} awk の中の詳細は以下のとおり (max<FNR){max=FNR} #最大行を保存する {L[FNR]=sprintf("%s%s\n",L[FNR],$0)} #L[行] の配列に各ファイルの行を保存する END{ for(i=1;i<=max;i++)printf L[i] #最後にLの配列の中身を順に表示する。 #print ではなく printf を使用するのは改行を表示させないため。 }

回答No.5

入力ファイルにタブ文字が含まれていなくて、かつ $ 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" >結果ファイル

  • geshon
  • ベストアンサー率61% (44/72)
回答No.4

30秒で作ったので、確認はご自分でお願いいたします。 $awk '{print $0 > "out-"FNR".TXT";}' {ファイルA} {ファイルB}... out-1.TXT, out-2.TXT のファイル名で 1行目のファイル、2行目のファイルになります。 001等にしたいならば、print の前でファイル名を生成してください。

回答No.3

・ファイルAの各行の行頭に行番号をつけたファイルAAを作る (ファイルの行頭に空白がないならcat -n A > AA 、あるならawkで行番号+特殊文字) ・同様にしてファイルBBを作る ・cat AA BB でマージした結果 を、sort -n で行番号順に並べ替えたあとで、行頭の行番号をsedで削除する って感じいけるのでは。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

そんなことをするコマンドはないので, 自分で作ってください.

  • gtx456gtx
  • ベストアンサー率18% (194/1035)
回答No.1

ファイルAとファイルBの行数が同じと仮定し、全く考えていないシェルですが・・・ シェルを行数の回数だけ繰り返すとfileC1...FileC(n)ができる。 ----- cat fileA | head -1 > fileC1 cat fileB | head -1 >> fileC1 ---- *fileC(n)を手動で変える必要ありますが ^ ^;

関連するQ&A

  • 2つのファイルを比較し、不足分を抽出する方法

    テキストファイルAに存在し、テキストファイルBに存在しない行を、テキストファイルCに書き出す手段を模索しています。 具体例を下記に示します。 -------------------------------------------------------- 【テキストファイルA】 a b c d e 【テキストファイルB】 a c 【テキストファイルC】 b d e -------------------------------------------------------- 上記を実現できるソフトウェアなどご存知でしたら、ご教授いただけると幸いです。 処理概要として、下記を実現できればOKかと思います。 (1)テキストファイルAの1行目を読み込む。 (2)テキストファイルBを1行目から最終行目まで検索する。 (3)一致する行がなければ、テキストファイルCに書き出す。 (4)テキストファイルAの2行目から最終行に対して、(1)~(3)を繰り返す。 以上、ご回答のほどよろしくお願い致します。

  • テキスト比較コマンドのdiffについて

    unixコマンドにdiffというのがありますね。2つのテキストファイルを比較してその違いを出力するというものです。このコマンドの意味がわからないところがあります。 テキストAとBの比較とは、 1 両者が全く同じかどうかを比較するということなのか、 2 テキストAとBに含まれている各行を取り出してどこかに一致する行があるかどうかをチェックするということなのか 3 あるいはそれ以外の意味 どのようなことを意味するのでしょうか。 1だったら、1行付け加わっただけでそれ以降が同じものであったとしても全部検索対象となり出力されます。 2だったら、何をしたことになるのでしょうか。全く同じ内容で行構成を入れ替えたら検索に引っかからないことになります。 私の希望としては1なのですが、そうするとわけがわかなないぐらい多くの出力結果となることが多いはずです。オプションなどで対応するとは思いますが、基本的には何をするコマンドなのでしょうか。 よろしくお願いします。

  • UNIXのコマンドを教えて下さい。

    AAAAという名前のテキストファイルにBBBBという文字列が含まれる行の最後に CCCCの文字列を追加したい場合、どのようなコマンドを使ったらよいでしょうか?

  • diffコマンドにてテキスト出力

    こんばんは。教えてください! 以下のような2つのファイルがあるとします。 ・aaa.txt abc111 abc222 abc333 ・bbb.txt abc333 abc444 これを比較して、比較結果をテキスト出力したいです。 テキスト出力したい比較結果は (1)重複しているもの全てテキスト出力 (2)aaa.txtのみにあるものをテキスト出力 (3)bbb.txtのみにあるものをテキスト出力 また、(1)~(3)は別々のファイルに出力したいです。 diffコマンドで、 diff a.txt b.txt >> c.txt とすると、 1つのテキストファイル(c.txt)に (1)~(3)すべてが書かれてしまいます。 環境は、windows XPにてCygwinを使用しています。 diffコマンドでなくても構いません。 宜しくお願いします。

  • UNIX: catコマンドで無限ループ???

    正確にはOS X 10.9.5のbashですが、UNIX一般の質問と思われるのでこのようなタイトルにしました。 catコマンドで、あるテキストファイルのあとに、同じテキストファイルをつくろうと思いましたが、無限ループになってしまい、巨大ファイルができてしまいます。 最初、このようにしてa.txtという1行のファイルを作りました。  [~]$ cat > a.txt  aaa それで、同じa.txtを  aaa  aaa という2行のファイルにしたいと思い、以下のようなコマンドを入力しました。 [~]$ cat a.txt >> a.txt 自分の目論見としては、a.txtの内容がa.txtに追加されるので、2行になるかと思いましたが、応答がなくなりました。 Ctrl+Cで停止し、a.txtの内容を見ると [~]$ cat a.txt aaa aaa aaa aaa aaa aaa ・・・・・・ と何千行も入っています。 ファイルのサイズはこれぐらいでした。 [~]$ ls -al a.txt -rw-r--r-- 1 TYWalker staff 16898724 9 22 12:57 a.txt これは、なぜこのような現象になるのでしょうか。 また、私が本来やろうとしたことを、簡単なコマンドで行うにはどうすればいいでしょうか。 よろしくお願いします。

  • unix sedコマンドについて

    file --------------------------------------- abcdefghijklmnopqrstu abcdefghijklmnopqrstu person=aaa wake walk work abcdefghijklmnopqrstu abcdefghijklmnopqrstu --------------------------------- といったファイルにて このファイルからperson~空白行を「sedコマンド」で削除したいのですがどのようにしたらよいでしょうか。 sedコマンドを使用すると、どうやら、数行あるテキストを一行にまとめ、空白行を見つけたらその行を削除するといった動きになるようです。(一行でそれを行うのでしょうか。。) どなたか、わかる方いたら教えていただけないでしょうか。 よろしくお願いします。

  • UNIX C ファイル出力

    UNIX Cにてあるテキストファイルの中身(1行分)を、別のテキストファイルに出力したいのですが、どうすれば、いいでしょうか。 例。A.txt 123 yano 200612   ↓ B.txt 123 yano 200612

  • ある操作に対するコマンド文が分りません(UNIX)

    UNIXを用いて解析を行い、datファイルを2種類出力し、 その後の計算をこれまでは手作業で行っていたのですが、 煩雑であるためバッチファイルを用いて全自動化したいと考えています。 しかし私はプログラミング初心者で、どのようなコマンドを用い、 どのようにコードを書けばいいのか皆目見当がつきません。 何卒、ご教授ください。 以下に、解析により出力される2つの生データを示します。 【A.datファイル】 flux1: -0.2 -8.83E-06 7.43E-06 flux1: -0.199499875 -9.09E-06 6.99E-06 flux1: -0.19899975 -8.70E-06 6.98E-06 flux1: -0.198499625 -8.04E-06 7.23E-06 flux1: -0.1979995 -7.81E-06 7.30E-06 flux1: -0.197499375 -8.21E-06 6.97E-06           (以下同様に続く) 【B.datファイル】 flux1: -0.2 -1.59E-05 -1.59E-05 flux1: -0.199499875 -1.57E-05 -1.57E-05 flux1: -0.1989997 -1.55E-05 -1.55E-05 flux1: -0.198499625 -1.53E-05 -1.53E-05 flux1: -0.1979995 -1.52E-05 -1.52E-05 flux1: -0.197499375 -1.50E-05 -1.50E-05           (以下同様に続く) この2つのファイルに対して行いたい操作が3つあります。 ----------------------------------- (1)1÷(A.datの2列目) (2)-[(A.datの4列目)÷(B.datの3列目)] (3)操作(1)、(2)の結果をまとめたC.datファイルの出力 ----------------------------------- これら(1)~(3)の操作をバッチファイルで行い、以下のC.datファイルを自動で出力したいです。 【C.datファイル(最終的に出力したいファイル)】 -5      0.467339354 -5.01253447 0.445290436 -5.025131943 0.449360934 -5.037792895 0.470909614 -5.050517808 0.481591986 -5.063307166 0.465199238    (以下同様に続く) どのようにコードを書けばいいのか、皆目見当がつきません… 加えて、もう1つ質問があります。 C.datの一列目の数値は-5から-50まで続くのですが、 ある特定の数値範囲の行のみを抜き出すには、どのようなコマンドを用いればよいのでしょうか? 例えば、一列目の数値が-5.06~-5.02の範囲にある行のみを抜き出し、 -5.025131943 0.449360934 -5.037792895 0.470909614 -5.050517808 0.481591986 というデータだけのdatファイルを出力するにはどうすればよいのでしょうか? (grepコマンドを用いれば可能ですか?) こちらも合わせてお答えいただけると非常に助かります。 ご教授よろしくお願い致します。

  • 二つのテキストファイルを行単位で交互に一つに

    10000行のテキストファイルが二つあります。 二つのテキストファイルの内容を行単位で交互に結合させて一つのテキストファイルにまとめたいのですが 例えると下記のようにしたいです。 二つのテキストファイルA.txtとB.txtがあるとします。 ---------------------------------------------- A.txt ああああああああああああああ ささささささささささささささささ ななななななななななななななな ------------------------------------------------ ------------------------------------------------ B.txt かかかかかかかかかかかかかか たたたたたたたたたたたたたた はははははははははははははは ----------------------------------------------- A.txtとB.txtの内容を行単位で交互に一つのテキストファイルとしてC.txtのように保存したいです。 ----------------------------------------------- C.txt ああああああああああああああ かかかかかかかかかかかかかか ささささささささささささささささ たたたたたたたたたたたたたた ななななななななななななななな はははははははははははははは ---------------------------------------------- 検索して調べてみたのですが Pasteコマンドで実現させる方法を試してみたのですが うまくいかず、もしかしたらWindowsにもともと備わっていない機能なのではないかと思い検索したらbusybox64.exeを ダウンロードしてインストールしようと思いましたが コマンドプロンプトにbusybox64.exe --installを 入力してみますとうまく生きました。 busyboxを使わずに行単位で交互にテキストファイルを結合させる方法も知りたいです。 よろしくお願い致します。 返答をお待ちしております。

  • batコマンド ファイルの一覧

    batファイルを使用して、指定したフォルダの中にあるテキストファイルの一覧を「一覧.txt」というファイルを新規作成して、そのファイル内に記載したいのですが何か良い方法はないでしょうか? ご教示お願いします。 (例) フォルダAの中にテキストA、テキストB、テキストCがある。 batファイルを実行すると同フォルダ内に「一覧.txt」が作成され、ファイルを開くと テキストA テキストB テキストC と記載されている。