プロが教えるわが家の防犯対策術!

環境は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

A 回答 (5件)

プログラムでも可能だとは思いますが、


そのテキストファイルがTAB区切りか、スペース合わせで作成されているのなら、
EXCELが使えるパソコンに持って行って、縦横を入れ替えれば一瞬です。

その後、csvで吐き出して、SQLLoaderでも使えばそのまま取り込めるのではないでしょうか。

参考URL:http://itpro.nikkeibp.co.jp/article/COLUMN/20060 …
    • good
    • 0

Perl ならまずできるでしょう. 変な文字コードを持ってこられたら困るかもしれんが.



シェルでできるかどうかは, たぶんシェルしだい. 大抵のシェルでできそうだけど, できないシェルがあっても驚きではないな.
    • good
    • 0

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
    • good
    • 0

間違った。

前のでも動くけど、とりあえず

(表示がくずれるの空白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

この回答への補足

素人で大変申し訳ないのですが
実行してみたところ以下のようなエラーが出てしましました。

$ 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

これはどのような意味でしょうか?

補足日時:2012/04/05 17:50
    • good
    • 0

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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!