• 締切済み

ファイル縦横変換

環境はUNIXです。 以下のようなテキストファイルを 変換してOracleのテーブルに 取込みたいのですがよい方法をご存知の方 いらっしゃいませんでしょうか? まずはテキストファイルを変換前の状態から 変換後のようにしたいのです。 シェルまたはPerlで実現可能でしょうか? <変換前> 地域名称 コーラ  お茶   ミルク  北海道  10,000  20,000  30,000 青森   10,000  20,000  30,000 <変換後> 北海道 コーラ 10,000 北海道 お茶  20,000 北海道 ミルク 30,000 青森  コーラ 10,000 青森  お茶  20,000 青森  ミルク 30,000

  • Perl
  • 回答数5
  • ありがとう数1

みんなの回答

回答No.5

bash入ってないかbashのバージョンが古いか。たぶんbashのバージョンが古いと思う。bashのバージョンが古いと配列が使えないから。 $ bash --version GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu) Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software; you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. $ bash foo.sh < foo.txt 北海道 コーラ 10,000 北海道 お茶 20,000 北海道 ミルク 30,000 青森 コーラ 10,000 青森 お茶 20,000 青森 ミルク 30,000

回答No.4

間違った。前のでも動くけど、とりあえず (表示がくずれるの空白2文字を全角空白で書いていることに注意) #!/bin/bash DELIMITER=' ' read line IFS_ORIG=$IFS IFS=$DELIMITER set -- $line IFS=$IFS_ORIG shift items=("$@") while read line; do   IFS_ORIG=$IFS   IFS=$DELIMITER   set -- $line   IFS=$IFS_ORIG   region=$1   shift   prices=("$@")   for ((i = 0; i < ${#prices[*]}; i++)) {     echo "$region ${items[$i]} ${prices[$i]}"   } done

get_taka
質問者

補足

素人で大変申し訳ないのですが 実行してみたところ以下のようなエラーが出てしましました。 $ foo.sh < foo.txt foo.sh: line 20: syntax error near unexpected token `"$@"' foo.sh: line 20: `  prices=("$@")' $ sh foo.sh < foo.txt foo.sh: 構文エラー 行 11: `items=' unexpected これはどのような意味でしょうか?

回答No.3

bash で書いてみたが、 perl の方がはるかに楽だな。 --- foo.sh (表示がくずれるの空白2文字を全角空白で書いていることに注意) #!/bin/bash DELIMITER=' ' read line IFS_ORIG=$IFS set -- $line IFS=$IFS_ORIG shift items=("$@") while read line; do   IFS_ORIG=$IFS   set -- $line   IFS=$IFS_ORIG   region=$1   shift   prices=("$@")   for ((i = 0; i < ${#prices[*]}; i++)) {     echo "$region ${items[$i]} ${prices[$i]}"   } done --- foo.txt(デリミタを空白に変更) 地域名称 コーラ お茶 ミルク 北海道 10,000 20,000 30,000 青森 10,000 20,000 30,000 --- result $ sh foo.sh < foo.txt 北海道 コーラ 10,000 北海道 お茶 20,000 北海道 ミルク 30,000 青森 コーラ 10,000 青森 お茶 20,000 青森 ミルク 30,000

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

Perl ならまずできるでしょう. 変な文字コードを持ってこられたら困るかもしれんが. シェルでできるかどうかは, たぶんシェルしだい. 大抵のシェルでできそうだけど, できないシェルがあっても驚きではないな.

回答No.1

プログラムでも可能だとは思いますが、 そのテキストファイルがTAB区切りか、スペース合わせで作成されているのなら、 EXCELが使えるパソコンに持って行って、縦横を入れ替えれば一瞬です。 その後、csvで吐き出して、SQLLoaderでも使えばそのまま取り込めるのではないでしょうか。

参考URL:
http://itpro.nikkeibp.co.jp/article/COLUMN/20060518/238339/

関連するQ&A

  • ファイル名一括変換ソフト

    100個以上のWindows(XP,2000)のファイルのファイル名を、任意の名称から、異なる任意の名称に名称変更したいのですが、1つづつ修正するのは間違いが生じるので、予めファイルを作成しておき一括返還したいと考えています。  変換ファイルは、CSVやテキストファイルで、たとえば、(変換前ファイル名、変換後ファイル名)という形式で指定できるとベストです。他の指定方法でも構いませんが、返還前に再確認できることが望ましいと考えます。  フォルダは、すべてのファイルが同じところにある前提(どこかで指定する)とします。  以上のような、フリーソフト、フリーウェア(小額なら、シェアウェアも可)を紹介いただけないでしょうか。

  • 複数のテキストファイルの一括置換について

    複数のテキストファイルの一括置換について 複数のテキストファイル(html)の中にある 【地域名】という文字列を一括でそれぞれA、B、C・・・・という風に異なる文字列に変換したいです。 たとえば 001/index.html の中にある【地域名】は北海道 に変換 002/index.html の中にある【地域名】は青森 に変換 ・ ・ ・ 変換前の文字列は同一ですが、変換後の文字列を全ファイル異なるものにしたいので秀丸等の一括置換ができずに困っています。 全ファイル開いて1つ1つ検索置換していくには2000ファイルほどあるので大変なので何かいい案はないでしょうか? よろしくお願いいたします。

  • UNIX上で文字コードの一括変換はできますか?

    UNIX上で、文字コードを変換したいのですが、今まではSJISからEUCといった変換にnkfを使用してきましたが、nkfだと1ファイル毎でしか文字コードを変換できませんでした。1行のコマンドでそのディレクトリ内の全てのファイルの文字コードを変換してくれるコマンドはありますでしょうか? UNIX上で実現できれば、Perlでもなんでも結構です。よろしくお願いします。

  • テキスト処理のシェルプログラム

    UNIXシェルもしくはPerlでテキスト処理のシェルスクリプト を作成したいのですがご教授お願いします 1000行あるテキストファイルを 2行単位で区切り2行単位で横一列へ置換しテキストへ出力したいのですが 例 処理前 aaa bbb ccc ddd eee fff 処理後 aaa,ccc,eee bbb,ddd,fff ご教授よろしくお願いします

  • csv内に書いてある全テキストデータを、1txtファイル内に格納したい

    csv内に書いてあるテキストデータを、 テキストファイル表に変換・・というツールは見つけたのですが 表ではなく、こちらが指定した表示方法で1txtファイル内に 全テキスト内容を格納したいです。(1項目ずつではなく) 例) 名称,電話番号,住所1,住所2 ○○店,011-○○-○○○,北海道,札幌市 △△店,031-△△-△△△,北海道,苫小牧    ↓↓↓ 表示させるためのテンプレートを自分で作成する テンプレート例) 名称:【名称】店 電話番号:【電話番号】 住所:【住所1】【住所2】    ↓↓↓ 名称:○○店 電話番号:011-○○-○○○ 住所:北海道札幌市 名称:△△店 電話番号:011-△△-△△△ 住所:北海道苫小牧     ・     ・     ・ という感じで、全テキスト内容を 「1txtファイル内に」格納したいです。 色々と調べているんですが、 うーん、これが中々方法が見つかりません^^; どなたか分かる方にお答え頂ければ幸いです。

  • セレクトメニューの項目をファイルから

    よろしくお願いいします。 セレクトメニューの項目を別に作成しているテキストファイルから読み込みことは可能でしょうか? aaa.txt 北海道,青森県,岩手県,宮城県,・・・ aaa.html-セレクトメニュー  |北海道|  |青森県|  |岩手県|  |宮城県|  | ・   |  | ・   |  | ・   | webサーバー・・・HP-UX web・・・IE CGI開発言語・・・Perl 開発端末・・・windows2000(Tera Term 使用) 以上、よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • access2000でテーブルを作成して、カラムにiと入力するとIに変換されてしまいます。iのままにできないでしょうか?

    access2000で新規にテーブルを作成して、テキスト形式のカラムに i を入力すると I と変換されてしまいます。 aiと入力すると変換されないようです。 今回、access2000で作成した内容をunixのシェルとして生成したいので、i が I に変換されると、シェル実行時にコマンドのオプションと認識してくれないので不都合が発生します。 また、無条件に I を i とするのもオプションに I をもつunixコマンドや他のソフトのユーティリティで不都合が発生します。 何か、この変換を制御する方法は無いでしょう? お手数ですが、宜しくお願いします。

  • LinuxでXMLを静的にHTMLに変換

    こんにちは。 XSLTを使い、XML文書を静的にHTMLに変換するツールを探しています。 WindowsのMSXSL.exeみたいなやつで... できれば、シェルから引数でXMLファイル名、XSLTファイル名、出力ファイル名とオプションを指定して変換する、くらいのものがいいです。 それとも、Perlのスクリプトか何かでありますでしょうか? よろしくおねがいします。

    • ベストアンサー
    • XML
  • UNIX形式のテキストファイルをDOS形式に変換する(cshで実行したい)

    UNIX形式のテキストファイルをDOS形式に変換するというbash以下のシェルをcshで書き換えたいのですが、どうすればよいでしょうか #!/bin/bash # u2d.bash set infname = "$1" set outfnname = "$2" cat "${infname}" | sed "s/$/`echo -ne '\015'`\" | iconv -f EUCJP -MS -t CP932 > "${outfname}" 出展:linuxWorld (株)IDGジャパン発行 1月号 P53

  • perlでのcsv形式のテキストファイルの変換

    perlを使用してcsv形式のテキストファイルを下記のように変換したいと思っています。 【変換前】 10, abc , def , ghi ,jkl    ----1行目 10, abc , def , aaa, bbb   ----2行目 10, abc , def , ccc , ddd  ----3行目 11, abc , def , eee , fff   ----4行目 11, abc , def , aaa , ggg ----5行目 11, zzz , def , aaa , ggg  ----6行目 12, abc , def , aaa ,ggg ----7行目 12, zzz , def, aaa , ggg   ----8行目 【変換後】 10, abc , def , ghi ,jkl    ----1行目 11, abc , def , eee , fff   ----4行目 11, zzz , def , aaa , ggg  ----6行目 12, abc , def , aaa ,ggg ----7行目 12, zzz , def, aaa , ggg   ----8行目 変換内容はcsv形式のテキストファイルで、”,”で区切った先頭3列が 前の行の先頭3列と同じならその行は出力しない、といった 変換をしたいと思っております。 (例えば2行目ですと先頭3列は10, abc ,defになっており、  1行目の先頭3列と同じ文字列になっているためこの行は出力しない) 当方、Perl初心者で上記のようなことがPerlでできるかも よくわかっておりません。 そこで、上記のような変換はPerlで可能なのか、そしてもし可能であるのなら どのようにPerlで記述すればできるのか教えていただけないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Perl