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でループさせる.
http://www.linux.or.jp/JF/JFdocs/Bash-Prog-Intro-HOWTO.html
BASH Programming - Introduction HOW-TO
bashですべて可能ですね。
ループはfor分
結合はcat
ファイル名変更はmv
です。
#!/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
ありがとうございます.具体的なコマンドまでいただけると,勉強になります.
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 ;
こちらはループをした場合ですね.ありがとうございます.
http://www.linux.or.jp/JF/JFdocs/Bash-Prog-Intro-HOWTO-9.html#ss...
BASH Programming - Introduction HOW-TO: �桼�����
綺麗なスクリプトありがとうございます.
オブジェクト指向スクリプト言語 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を操れるのですね.ありがとうございます.
ありがとうございます.このURLは簡潔にまとまっていてよいですね