• ベストアンサー
  • すぐに回答を!

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

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数928
  • ありがとう数3

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

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

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

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

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

  • cygwinでcshが認識されず困っています

    初めまして。現在、研究に必要なため、windows上でcygwinを使っております。 cshで書いたスクリプトを実行すると、 bash: csh: command not found と出てきてしまいます。 数週間前にPCに不具合があり、リカバリしたためcygwinを入れ直したところ、 このような事態になりました。 以前と同じ設定をしたので、原因がわかりません。 見当違いの方法かもしれませんが、 起動時のシェルをtcshに変えてみても状況は変わりませんでした。 UNIX等についてあまり詳しくないため、大変困っております。 cygwinを使ってらっしゃる方、UNIXに詳しい方、教えて頂けませんでしょうか? よろしくお願いいたします。

  • 標準入力からシェル変数及び環境変数に値を設定する(bash)

    標準入力からシェル変数及び環境変数に値を設定する方法で、cshの場合は「set 変数=$<」ということは確認しているのですが、bashの場合はどのようにすればよろしいのでしょうか?ご教授お願いいたします。

その他の回答 (1)

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

最初に・・  書き換えたシェルのテストはしていません。 (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シェル系がお勧めだと思いますよ。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • 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 @: 数値形式が正しくありません。

  • CentOS bashシェルの表記意味

    下記のようなbashシェルの表記が理解できません。 ______________ #!/bin/bash clmline=8 file=testfile2 tmp='temp.txt' sed -e "${clmline},\$d" ${file} ______________ linuxを勉強中の初心者です。 会社にあるシェルを理解する為に、自宅にてテストで作成しています。 sed -e"1,2d" ファイル名 でファイル名の1~2行目を削除する意味と思われますが、 『 ${ } 』 としている意味、及び『 \$d 』の意味が理解できません。 そして、自宅のcentosでは『 \ 』が『バックスラッシュ』となり入力できません。 キーボード設定は下記となります。 $ cat keyboard KEYBOARDTYPE="pc" KEYTABLE="jp106" ご教授よろしくお願いいたします。

  • Cシェルにあるコマンドの代わり

    UNIX端末でCシェルのプログラムがあるのですが、今後UNIX端末を 廃棄して、WindowsのPCだけにするようなので、プログラムが使えなくなるのが困ります。 いくつかはVB2005でdosコマンドを使って作り直したのですが、今作ろうとしている物の中の コマンドで調べても解らないのがありました。 echo(echo $a > sssやecho 'abc def' >> sss) cat(set x = 'cat rrr') paste(paste fff ggg > hhh) などのコマンドと、あとawkがありました。 よろしくお願いします。

  • sedコマンドでのエスケープ文字の扱い

    はじめまして。Linuxのsedコマンドで困っています。 sedの置換文字列として連続する\をリテラルとする処理を考えていますが、\がいくつ入ってくるか(変数)、わからない場合において、複雑な処理なしに対処できないか、考えています。 ↓簡単な例ですが、コマンドベースで説明すると以下のようなものです。 $ var='\\' $ cat file.txt aa $ sed "s/.*/$var/" file.txt \ という結果になりますが、置換文字を変数から取る際に、連続する\が設定されるケースを想定したプログラムを組むたいと思っています。 \が入ってくる個数がわかるのであれば、\を2倍にセットしておけばできそうですが、いくつセットされてくるかはわからない場合、何かよい方法はないでしょうか。 念のため、Linux環境で、GNU sed 4.1.2版で試行しています。シェルはbashです。よろしくお願いします。

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

    どなたか教えてください。 以下のような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 : %

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

    こんにちは。 今、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 となってしまいます。 何かうまい方法はないでしょうか? どうかアドバイスお願いいたします。

  • 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 ------------------------------------------ 皆さんのご意見、ご指導をお待ちしてます。

  • bashでのunixtime変換について

    bashでのunixtime変換について質問です。 下記のようなunix時間と数値が記載されたテキストがあり、 unix時間を変換する必要がありました。 ※ここではunix時間のみ変換したかった # more unixtime.txt 1387875600 10 13 15 1387879200 27 19 26 1387882800 14 17 19 1387886400 22 16 14 そこで下記のように2行で変換しました。 cat unixtime.txt | awk '{print $1}' >>unix.txt cat unix.txt | awk '{print strftime("%Y-%m-%d %H:%M:%S",$1)}' >>time.txt そこで質問です。 (1)2行で実行したコマンドを1行で実行するにはどのように書けばいいのでしょうか。  ワンライナーでかっこ良く書きたい・・・・です。 (2)unixtime.txtのunix時間を変換して"%Y-%m-%d %H:%M:%S"+数値の形式とするには どのように書けばいいのでしょうか。 お手数ですが皆様のお知恵をおかしいただきたく。 よろしくお願いします。

  • 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 以下略

  • cshの標準出力を制御したい

    実は以下にも同じ質問があったのですが、回答がついてなかったので改めて質問させて頂きます。 cshで以下の様な形で"ls"の結果をシェル変数に取りたいのですが: set list = `ls *.s | sed -n 's/\.s//p'` lsの結果がマッチしなかったときに出力されるメッセージ: ls: 照合パターンに合いません. がコンソールに出力されると誤解を招くのでそれをやめさせたいのですが、何か良い方法はないでしょうか? 色々試しましたが簡単な方法は無い様な気がしています。 [コマンド] set list = `ls *.s | sed -n 's/\.s//p'` [例] (1) OKケース %>ls *.s aaa.s bbb.s 結果==> aaa bbb (2) NGケース %> ls *s ls: 照合パターンに合いません. [とりあえずやりたい事を実現する方法] ls *.s >& /dev/null if($status == 0) then # ls is matched set list = `ls *.s | sed -n 's/\.s//p'` endif ※ 冗長でかつ処理速度が遅いという問題があろうかと思います。 [以前の質問] http://www.okweb.ne.jp/kotaeru.php3?q=825419 以上宜しくお願いいたします。