人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

次1-4のような処理を自動処理させたいのですが
cygwin上のbashおよびperlやruby等を利用した方法そのものかその参考となるサイト・本を教えてください.★特に4の自動処理に関するコメントを希望します.
ちなみに当方DOSのバッチファイルなどは多少使用していますがshファイルの書き方なども良くわかっていません.
==
1.ヘッダーファイル(head_1991.txt)とデータ(deta1991_Jan.csv)を結合して保存(file1991_Jan)(DOSで言うところのcopy a+b c)
2.cygwin上のコマンド操作可能な特定のアプリケーションからファイル(file1991_Jan)を開き,操作後out.txtに出力.(2はアドバイス不要)
3.出力されたファイル(out.txt)のファイル名(file1991_Jan_out.txt)に変更
4.★この操作をファイル名の1991〜2005,およびJan〜Decをforでループさせる.

●質問者: arakai
●カテゴリ:就職・転職 コンピュータ
✍キーワード:bash CSV cygwin DEC DoS
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● actual
●16ポイント

http://www.linux.or.jp/JF/JFdocs/Bash-Prog-Intro-HOWTO.html

BASH Programming - Introduction HOW-TO

bashですべて可能ですね。

ループはfor分

結合はcat

ファイル名変更はmv

です。

◎質問者からの返答

ありがとうございます.このURLは簡潔にまとまっていてよいですね


2 ● dev_zer0
●16ポイント

http://cyberam.dip.jp/linux_command/shellscript/shellscript_main...

シェルスクリプト(Bash)

#!/bin/bash


# 4. 1991?2005,およびJan?Decをforでループさせる.のは面倒なので

# カレントディレクトリ配下にある全てのcsvに対して処理を行う

for f in $(ls *.csv)

do

# 年、月の取得(detaYEAR_MON.csv)であることが前提条件

year=$(expr substr $f 5 4)

month=$(expr substr $f 10 3)


# copy a+b cはbashではcat a b > c

cat head_${year}.txt $f > file${year}_${month}


# 2.のコマンド操作を行う


# 3. ren a b はbashではmv a b

mv out.txt file${year}_${month}_out.txt

done

◎質問者からの返答

ありがとうございます.具体的なコマンドまでいただけると,勉強になります.


3 ● sasakipochi
●16ポイント

http://www.rhythm-cafe.com/shell/GrammerMenu.aspx

???{?I????@ - [?V?F???X?N???v?g ???t?@?????X & Tips]

1.の回答です。


cat head_1991.txt deta1991_Jan.csv > file1991_Jan


もしくは


cp head_1991.txt file1991_Jan

cat deta1991_Jan.csv >> file1991_Jan


2 はアドバイス不要ということでしたが、もし、単語の置換や、整形等、自動処理ができるようであれば、自動処理等をするフィルタースクリプトを書くと便利です。

その場合は以下のように書くことができます。


cat file1991_Jan | (フィルタースクリプト) > out.txt


3. は以下のようにします。


mv out.txt file1991_Jan_out.txt


4.は、以下のようにします。


for y in 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 ; do ¥

for m in Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ; do ¥

cat head_$y.txt deta$y_$m.csv > file$y_$m ; ¥

cat file1991_jan | (フィルタースクリプト) > out.txt ; ¥

mv out.txt file_$y_out.txt ; ¥

done ; ¥

done ;

◎質問者からの返答

こちらはループをした場合ですね.ありがとうございます.


4 ● naka1kazu
●16ポイント

http://www.linux.or.jp/JF/JFdocs/Bash-Prog-Intro-HOWTO-9.html#ss...

BASH Programming - Introduction HOW-TO: ??????? ◎質問者からの返答

綺麗なスクリプトありがとうございます.


5 ● naka1kazu
●16ポイント

http://www.ruby-lang.org/ja/

オブジェクト指向スクリプト言語 Ruby

#!/usr/local/bin/ruby

for i in 1991 .. 2005 do

file1 = ”file_”+i.to_s+”.txt”

for j in [”Jan”,”Feb”,”Mar”,”Apr”,”May”,”Jun”,”Jul”,”Aug”,”Sep”,”Oct”,”Nov”,”Dec”] do

file2 = ”data”+i.to_s+”_”+j.to_s+”.csv”

file3 = ”file”+i.to_s+”_”+j.to_s

file4 = file3+”_out.txt”

system(”echo cat”+file1+” ”+file2+” > ”+file3)

system(”echo 2の処理”)

system(”echo mv out.txt ”+file4)

end

end

Ruby版です。4と同じですのでポイントは要りません。Bash版は$i_がうまくいきませんでしたがこちらの方がプログラミングはしやすいですね。どちらも力ずくなので、もう少しきれいにできるとは思います。

◎質問者からの返答

なるほどRubyからでもsystem()とすれば簡単にbashを操れるのですね.ありがとうございます.

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ