• ベストアンサー

こんにちは。

こんにちは。 UNIXを勉強中のものです。 縦一列にデータが入っているテキストファイルがあります。 これを12行ごとに違う列に並べていきたいのですが、方法がわかりません。 shell,awkなどを使ってできる方法をご存知の方いらっしゃいましたら、 ご教授お願いします。

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

  • ベストアンサー
  • tyatsumi
  • ベストアンサー率58% (30/51)
回答No.2

splitとpasteを使ったシェルスクリプトで書いてみました。 次のスクリプトを rowwrap という名前で保存して実行属性を付けてください。 #!/bin/sh TEMP=/tmp/rowwrap_ split -l $2 $1 $TEMP paste $TEMP* rm -f $TEMP* 使い方は、data というファイルにデータが入っているとして、 12行ごと列に分けるとして、 結果を result というファイルに入れるとすると、シェル上で ./rowwrap data 12 > result とします。 なお、一時ファイルを /tmp 以下に作るようになっています。 一時ファイルの場所を変えたい場合は TEMP 変数を書き換えてください。

goo2dolls
質問者

お礼

きれいなスクリプトですね。 シェルスクリプトに ./rowwrap data 12 > result のようにファイルを投入する方法も始めて知りました。 勉強させていただきました。 ありがとうございます。

その他の回答 (1)

noname#140045
noname#140045
回答No.1

【補足要求】 "違う列"と言うのが、イマイチよくわかりません。 例えば、1~23の数字からなる、23行のファイルを処理すると、どうなれば良いのでしょうか。 具体的な説明をお願いします。

goo2dolls
質問者

補足

説明が足りず申し訳ありません。 その場合、 1~12が一列目 13~23が二列目 となるようにしたいのです。 もし1~36の数字からなる36行のファイルだった場合 1~12が一列目 13~24が二列目 25~36が三列目 となります。 これのn行(nは不明)という場合の処理をしたいということでした。 よろしくお願いします。

関連するQ&A

  • awkで改行を除いて文字列を抜きだす

    こんにちは。 UNIXユーザーです。 awkでテキストファイルから行、列を指定して、文字列を抜き出し、それをシェルで変数として定義したいのですが、各行の最終列(最も右の列です)を指定すると、抜き出した文字列の末尾に’^M’がついてしまいます。 これが改行を意味するということは分かったのですが、これを取り除くためにはどうしたらよいでしょうか?? どなた様かご教授ください。 よろしくお願いいたします。

  • 変数に格納している文字列の読み込み

    ある変数($text)にHTMLデータが格納されています。 その変数内の文字列を、1行ずつ読み込む方法はあるのでしょうか。 $textをファイルに変換して読み込むべきでしょうか。 ぞ存知の方、ご教授をお願いします。

    • ベストアンサー
    • PHP
  • UNIXには直接ファイル操作コマンドありますか?

    本当に困ってます(T_T) UNIXのShell Scriptでテキストファイルの一部(何行か)を削除したいです。リダイレクト機能とか使わないで、直接ファイルから削除することはできますか? UNIXって直接ファイル編集するコマンド聞いたことないですが、そういうコマンドありますか?

  • UNIXでのプログラム

    UNIXでのシャルスクリプトでもAWKでもいいのですが以下のようなことがやりたいのですが、いい方法が思い つきません。どなたか教えて下さい。 テキストファイルがあり、そのファイル中の”//”という文字から行末までは削除したファイルを作りたい。 ”//”という文字列は文字列の途中にあるケースも前後にスペースが存在して単語として存在しているケースもあります。

  • ワード→エクセルのコピペについて

    ワード内の表で二行*七列のデータがあるとします。そこから下の(数字)のように選択してコピーし、 (1)(2)●(3)(4)(5)(6) ●●●●(7)(8)(9) さらにそれをエクセルに横一列に、 (1)(2)(3)(4)(5)(6)(7)(8)(9) といった具合にペーストしたいです。●のデータは不要です。 こういったことは可能でしょうか? もし方法をご存知でしたらご教授ください。よろしくお願い致します。

  • エクセルの最適な関数について至急教えてください!

    あるファイル同士のデータをひとつのエクセル上に載せて突き合わせ、合致している数を数えたいのですが、その方法がわかりません。 あるファイル1のテキストデータは、1単語が一行ずつになっている為、エクセルに転写すると たとえばA1:A10のように一列に並べることができます。A群とします。 しかし、もういっぽうのエクセル上のファイル2は、たとえばD1:G6 のように、6行×4列のようにまたがっています。B群とします。 このデータを、ひとつのエクセルファイルに乗せて、1列のA群と、列×行といったB群の単語同士を突き合わせ、あるセルに何個合致したかその結果を算出させたいのですが、よい方法がわかりません。 この事例で構いませんので、最適なエクセル式を教えてください。 宜しくお願いします。

  • awkかsedで

    当方、UNIX系OSを使っているCUI初心者です。 awkかsedを使って、テキスト内の文字列を取得したいのですが、 上手くいきませんorz 例えば、テキスト内にデータ名があったとします。 そのデータ名の拡張子を取得する場合は、どうすればいいのでしょうか? 皆さん、教えてくださいm(_)m

  • テキストファイルの行抽出

    linux環境のプログラムについて質問です。 ある特定のファイル(テキストファイル)内のデータで 指定の行を抽出する方法を教えていただきたいと思います。 現在はawkを使用してbashスクリプト内で下記のように head, tailを使用していますが、処理が重いように 感じます。perlまたはawkなどで行抽出の軽い処理は できないでしょうか? (他のunixコマンドでも結構です。) ---------------------------------------- RNUM=`awk 'END{print NR}' $1` #行番号取得 for iwl in `seq 1 $RNUM`;do BASE=`head -n $iwl $1 | tail -n 1` done #iwl ---------------------------------------- Fortran, Cなども使えますが、色々組み合わせて使う上で bash内のスクリプトで行ないたいと思います。

  • テキストファイルのデータを変更せずにエクセルの表にする方法で

    エクセルで「,」で列が区切られたテキストデータを開き、「,」を区切り位置として利用してエクセル表にした場合、列のデータ形式が「G標準」となっているので、データが狂ってしまい困っています。 例えば、「000015」という数字が「15」になっていたり、住所の番地以下の「16-8」などが、8月16日になったりします。 全ての列をテキストファイルウィザードで「文字列」にすれば、もどのデータのままエクセルにできるんじゃないか!と思ったのですが、列が80列くらいあるので、ウィザードで一列一列を列のデータ形式を文字列に変えると時間がかかってしまいます。 とのデータのまま、テキストをエクセルに変えるいい方法はありませんでしょうか。 どうぞよろしくお願い致します。

  • shell(awk)でファイル内の同一キーをグループ化

    shell(awk)のご相談です。 (キー項目) (データ) キー1 列2データ(1) キー1 列2データ(2) キー1 列2データ(3) キー2 列2データ(1) キー2 列2データ(2) というデータがあり、これを キー1 列2データ(1) 列2データ(2) 列2データ(3) キー2 列2データ(1) 列2データ(2) というように、キー項目(1列目)が同じ行ごとに データ(列2)を1まとめにすることは可能でしょうか?