• ベストアンサー

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

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

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

書換える必然性がよくわかりませんが....

maiko100
質問者

お礼

ありがとうございました。今回は都合によりCシェルで作っています。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • vais
  • ベストアンサー率75% (47/62)
回答No.2

最初に・・  書き換えたシェルのテストはしていません。 (iconv コマンドが手元にないためです) Cシェルはあまりお勧めしませんが、この手のスクリプト程度なら、Cシェルでもいいでしょうね。  たしかに、Tacosanさんのいうように書き換える必然性がわからなかったのですが、お使いのOSでは、Bシェル系がない・・ということでしょうか。  上記のスクリプトでBシェル固有なのは、変数設定の部分だけですね。 (Bシェルって、set で変数設定しましたっけ?  Cシェルだと、set で変数設定するですけど) 重要なのは  cat から始まる行 です。  $1 や $2 は、スクリプトに与えられる引数を、第1、第2パラメータと置き換えるための変数です。  シェルスクリプト Cシェル とすれば、多くのサイトがヒットすると思いますが #!/bin/csh # u2d.bash という名前なのでしょう set infname=$1 set outfname=$2 cat $infname | sed -e "s/$/`echo -ne '\015'`\" | iconv -f EUCJP -MS -t CP932 > $outfname と言うことになります。  なにやら回りくどい気もしますが。  個人的感想では、今後OS管理等を、もしもされるのだとしたら、スクリプトでのログ出力などが容易なBシェル系がお勧めだと思いますよ。

maiko100
質問者

お礼

ご丁寧にありがとうございます。実行してみましたが、「変数名が不正です」とのエラーが出ました。もう少し調べてみたいと思います。おっしゃるとおりBシェルと思いますが、今回は客先の都合によりCシェルで作っています。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • cshにてファイル名補完の設定の仕方

    Linuxのcshにてファイル名補完の仕方を教えてください。 ・bashで[TAB] ・Unixのcshで"set filec"で[ESC] はできますが、Linuxのcshで"set filec"で[ESC]では補完されません。 LinuxはRHEL3.0U6を使用しています。 宜しくお願いします。

  • cshからperlを呼び出しファイルに出力

    いつもお世話になっております。 cshからperlを呼び出しperlが出力する内容と入力項目を実行しているcsh内部で行ない結果をファイルへ出力したいのですが、そのような事ができるのでしょうか? ---------- cshファイル内 #!/bin/csh echo "●perl a.pl を実行します" | tee a.log perl a.pl ---------- perlファイル内 (perlがわかりませんので、perlの内容をcsh形式で記述させていただきます) (1)echo -n "日付を入力して下さい" (2)echo "⇒ " (3)set INPUT_DATE = $< (4)echo "日付:$INPUT_DATE " exit 0 ---------- cshから実行されたperl(csh)の内容[(1)(2)(3)(4)]をファイル(| tee a.log)へ出力することが可能でしょうか? ご存知の方がいらっしゃいましたらご教授願います。

  • UNIX Cシェルで実数の比較

    UNIX Cシェルで実数の比較がしたいのですが、 うまくいきません 以下のような結果になります。 うまく判定するにはどうすればよいのでしょう #!/bin/csh -f set CONSIZE=-0.01 echo "CONSIZE = $CONSIZE" @ CONSIZE = $CONSIZE if( $CONSIZE < 0.0 )then echo " 0以下;;; $CONSIZE" exit endif 実行 CONSIZE = -0.01 @: 数値形式が正しくありません。

  • unix上で ./configurの形式のコマンド

    unix上で ./configure(そのあとに、makeコマンドが続くような形式 で実行できるファイルの事を知りたいのですが、どういったワードで調べたら宜しいでしょうか? シェルの形式に近いのかな?と思ったのですが、コメントアウトされていて調べきれていません。 ./configure内は以下の通りです #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.65 for cvc3 devel. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else 以下略

  • シェルの変数セットについて

    どなたか教えてください。 以下のようなUNIXのシェルを作ってみたのですが変数がうまくセットされません。 これは仕様なんでしょうか??? シェルはkshでシェルの中でsuしているユーザはcshです。 例: ==test.sh== #!/bin/ksh A1="test test" su - user1 <<EOF echo "A1 :" $A1 set A2 =(test test) echo "A2 : " $A2 EOF exit ==実行結果== %./test A1 : test test A2 : %

  • DOSバッチでUNIXテキストファイルの文字列置換

    お世話になります。 早速ですが、 「DOSバッチでテキストファイルの文字列置換を行うプログラム」がいろいろ紹介されていたので、 皆さんのプログラムを流用させていただき、勝手に継ぎ足したDOSバッチプログラムを以下の ように作りました。 このDOSバッチで置換されたテキストファイルに2つの問題が発生して困っています。 問題 1)UNIXテキストファイルの改行コードがLFからCR+LFに変ってしまう。     文字列置換した後にファイルサイズが大きくなっていたので発見しました。      問題 2)空白行がなくなる。     DOSプログラムでは、対応不可でしょうか?     やはり、sed,awk,WHS,power shell を使わないと解決しませんか? -(DOSプログラム f0.bat)------------------------------------------------------ ::** @echo off setlocal ENABLEDELAYEDEXPANSION set fname=%1 copy /b %fname% org >nul type nul >%fname% for /f "delims=" %%a in (org) do (set line=%%a&&set l=!line:abc=xxx!&&echo !l!>>%fname%) del org goto end :end exit /b 0 -(実行時の標準出力結果 list)----------------------------------------------- C:\>setlocal ENABLEDELAYEDEXPANSION C:\>set fname=t22.txt C:\>copy /b t22.txt org 1>nul C:\>type nul 1>t22.txt C:\>for /F "delims=" %a in (org) do (set line=%a && set l=!line:abc=xxx! && echo !l! 1>>t22.txt ) C:\>(set line=J0000000 && set l=!line:abc=xxx! && echo !l! 1>>t22.txt ) C:\>(set line=HHH && set l=!line:abc=xxx! && echo !l! 1>>t22.txt ) C:\>(set line=519 && set l=!line:abc=xxx! && echo !l! 1>>t22.txt ) C:\>(set line=2011-08-28 12:16:44.98302 && set l=!line:abc=xxx! && echo !l! 1>>t22.txt ) C:\>(set line=2011-08-28 12:16:44.016114 && set l=!line:abc=xxx! && echo !l! 1>>t22.txt ) C:\>(set line=0 && set l=!line:abc=xxx! && echo !l! 1>>t22.txt ) C:\>(set line=abc && set l=!line:abc=xxx! && echo !l! 1>>t22.txt ) C:\>del org C:\>goto end C:\>exit /b 0 --(置換前 t22.org LF改行コード)-------------- J0000000 HHH 519 2011-08-28 12:16:44.98302 2011-08-28 12:16:44.016114 0 abc --(置換後 t22.txt CR+LF改行コード)----------- J0000000 HHH 519 2011-08-28 12:16:44.98302 2011-08-28 12:16:44.016114 0 xxxx ------------------------------------------ 皆さんのご意見、ご指導をお待ちしてます。

  • ブランクを含む環境変数の置換

    こんにちは。 今、UNIX上でファイルのある文字をある環境変数で置換するようなシェルを作成中です。 そこで、以下のようにsedを使用してみました。 cat AAA.txt |sed s/CurFY/`echo $FY`/g AAA.txtの内容 AAA BBB CurFY この時、環境変数$FYがブランクを含まない値の場合 はうまくCurFYを$FYの値に変更できるのですが、$FYに ブランクが入っていた場合は実行できません。 実行例) setenv FY "ACT 2003" cat AAA.txt |sed s/CurFY/`echo $FY`/g sed: コマンドが正しくありません: s/CurFY/ACT となってしまいます。 何かうまい方法はないでしょうか? どうかアドバイスお願いいたします。

  • CSHの環境変数の設定

    CSHで外部で定義したconfigファイルから変数を読み込み そのシェル及び子シェル内で有効な変数として使用したのですが どのような方法がありますでしょうか? 以下の方法だと親シェルからでは子シェルで設定した変数が読み込めないため困っています。 config.csh #!/bin/csh -f setenv AAA aaa test.csh #!/bin/csh -f set APP_ROOT = `dirname $0` cd $APP_ROOT set CONFIG_FILE=$APP_ROOT"/config.csh" echo $AAA

  • シェルスクリプトのbashとperlについて

    シェルスクリプトのbashとperlについて 今さら気づいたのですが、PerlもUNIXのコマンドやシェルスクリプトとして使用できるということでしょうか。 RubyやPHPをUNIXのコマンドやシェルスクリプトとして使用することはできますでしょうか。 学ぶとしたら、bashとPerlのどちらが良いでしょうか。 また、シェルスクリプトはどんな用途や利点がありますでしょうか。 Webアプリケーションによるバックアップやログをタイマーでセットして自動的に取得したりすることは可能でしょうか。

  • [シェルスクリプト]ファイル変換後に空になる

    ubuntu ver9.04 上で以下のような連番(01~09)の付いたCSVファイルの4,5,11,12列目のフィールドを抜きだし区切り文字を","から空白に置き換え.datファイルにするというシェルプログラムを作っています. たまに一部のファイルが空で出力されます.(ファイルは出力されるのですが中身がない)なぜでしょうか? 誰かご教示願います. #!/bin/bash passB="./data/sw0174-h13-d0-" passA="0001" kaku=".csv" dat=".dat" #echo $passB # input file number echo 'Please input minimum file number (ex.03)!' read fnumin echo 'Please input maximum file number (ex.05)!' read fnumax delta=`expr $fnumax - $fnumin` echo "delta=" echo $delta cnt=0 while [ "$cnt" -le "$delta" ] do echo "cnt=" echo $cnt fpass=$passB$fnumin$passA$kaku echo $fpass cvtf=$passB$fnumin$passA$dat echo $cvtf cut -d ',' -f 4,5,11,12 $fpass > $cvtf cat $cvtf | sed -e 's/,/ /g' > $cvtf cnt=`expr $cnt + 1` fnumin=`expr $fnumin + 1` fnumin=0$fnumin echo "fnumin=" echo $fnumin done