• ベストアンサー
  • 暇なときにでも

シェルでのスペースを考慮した処理方法

以下のようなシェルを実行しますと #! /bun/csh set A_CODE = `echo "   5555 " | awk -F\t {print $1}'` echo "$A_CODE" (5555の前後に複数のスペース文字有り) 結果--------------------------- 5555 ------------------------------- というようにスペースがなくなってしまいます。 なにか方法がありましたら教えてください。

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

  • 回答数3
  • 閲覧数1163
  • ありがとう数9

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

  • ベストアンサー
  • 回答No.3
  • mko2
  • ベストアンサー率75% (3/4)

すでに解決済みかもしれませんが。。。 % cat test1.csh #!/bin/csh set A_CODE = "`echo '   5555 ' | awk -F\t '{print $1}'`" echo "$A_CODE" % % ./test1.csh   5555 %

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

質問者からのお礼

いえいえ未解決です。 "と`の使い方であること了解しました。 ありがとうございました。

その他の回答 (2)

  • 回答No.2
noname#139383
noname#139383

わざわざ環境変数を送っていただき、ありがとう ございました。 LANG=jaに設定してみましたが、結果は同じでした。 どうも変数に格納するときに、スペースが消去される みたいです。 /export/home/test% echo " 5555 " | awk -F\t '{print $1}'   5555 はスペースもちゃんと表示されますが、awkを挟まず単純に 頭にスペースのついた文字列を入れると、 /export/home/test% set A_CODE = "  5555 " /export/home/test% echo $A_CODE 5555 のようになります。 お役に立てずにごめんなさい。 また何かわかったら回答させて頂きます。

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

質問者からのお礼

お手数掛けます。 変数に格納するときに、スペースが消去されることはこちらでも確認しました。 >お役に立てずにごめんなさい。 そんなことはありません。いろいろ情報をいただきました。 ありがとうございました。 しばらく閉じないでおきます。

  • 回答No.1
noname#139383
noname#139383

awk -F\t {print $1}'` {printの前に ' が抜けていたので付け加えて、下記コマンドを実行しました。 /export/home/test% set A_CODE = `echo "   5555 " | awk -F\t '{print $1}'` /export/home/test% echo $A_CODE   5555 と、ちゃんとスペースも表示されます。 はっきりとはわかりませんが、以前同じようにあるマシンでは行頭のスペースが表示され、 他のマシンでは行頭のスペースがなくなって表示されることがありました。 環境変数が原因ではないでしょうか。 同じ設定で試してみたいので、 よかったら実行環境の環境変数を教えて下さい。

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

質問者からの補足

回答ありがとうございます。 環境変数は以下のようになっています。 PATH=/usr/ucb:/usr/bin:/usr/etc:/usr/sbin:/usr/ccs/bin:/opt/SUNWspro/bin/:/usr/local/bin TERM=vt100 TZ=Japan SHELL=/bin/csh LANG=ja EDITOR=vi OPENWINHOME=/usr/openwin よろしくお願いします。

関連するQ&A

  • シェルの配列

    シェルで2つの配列の同じ位置の文字を同時にチェックしようとして以下のコードを組みましたが、上手くいきません。$dd中の文字が配列として扱われていないのはなぜだか教えていただけますか? #! /bin/csh -f set AA="18" set BB="20" set cc = "11 12 18 19" set dd = "24 22 20 21" @ idx = 1 foreach h_code ( $cc ) echo [$AA][$h_code][$BB][$dd[$idx]]     # ccの1個目とddの1個目をそれぞれ$AA,$BBと比較 if( $AA == $h_code && $BB == $dd[$idx] ) then echo "OK" endif @ idx++ end

  • Bシェルのawkコマンドについて

    Bシェルのawkコマンドについてですが、例えばプロンプトから % ls -l hoge.txt | awk '{print $5}' と入力すると、hoge.txtのファイルサイズが出力されますが、同様のことをBシェルの中で行おうと思っています。 下記のように、配列arrayにはスペース区切りで3つのデータが入っており、N番目のデータを取得したいという場合に、Nに変数を使用して取得する方法がわかりません。 #!/bin/sh array="AA BB CC" num=3 # CCを取得したい echo $array | awk '{print $num}' 上記で実行すると、"AA BB CC"のようにすべて出力されてしまいます。awkで出力する箇所を${数値}で指定すればうまくいくのですが、ランダムで決めた数値(1~3)をnumに入れて取得したい場合、このようなことは可能でしょうか。 もし不可能な場合でも、awk以外に何かコマンドがあればご教授願います。なお、作成するのはBシェルになります。

  • csh(Cシェル)のevalに関して

    evalを用いてインクルード的な事を行いたいのですが、「コマンドが見つかりません」が出てきて困っています 原因はなにがあるのでしょうか? 色々ネットで調べて同じように記述したつもりなのですが csh初心者で申し訳ありませんが 使い方が悪いのか、環境が悪いのか?判断できません 環境は別の人に作って貰ったんで、環境なら環境から勉強していきたいと考えてます ■TEST010.csh #!/bin/csh echo "TEST010-Step0010" eval `./TEST000.csh` echo "TEST010-Step0020" echo " set root_path $root_path;" echo "TEST010-Step0090" ■TEST000.csh #!/bin/csh set lcmoji01 = /export/home/tbn/km echo "set lcmoji01 $lcmoji01;" ■実行結果 > csh TEST010.csh TEST010-Step0010 ^M: コマンドが見つかりません。 TEST010-Step0020 lcmoji01: 未定義の変数

  • 処理結果をファイルへ・・・

    set MUCHDAY = `grep $TODAY PDXFGKS.TXT` の結果を、ファイルに書き出したいのですがうまくいきません。 (MUCHDAYは内部変数です) 方法をご存じの方お教え下さい。 (尚、ディレクトリは関数の最初で移動していて、 移動した先にそのファイルを作りたいのです。 その後この様な処理をかませたいので・・・) set EDPTODAY = `more PDXFGKS.TXT | awk -F, '{print $1}'` if($HOLIDAY == "H")then echo "休日シェル作動" else echo "平日シェル作動" endif (PDXFGKS.TXTが結果内容を入れたいファイルです)

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

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

  • シェルスクリプトで、空白(スペース)を含む変数をawkに渡したいのです

    シェルスクリプトで、空白(スペース)を含む変数をawkに渡したいのですが、どうしたらいいでしょうか? 例えば、以下のようなtest.shというファイルを作ったとします。 --------------- #!/bin/sh AAA="x y" echo "" | awk '{print $AAA}' -------------- としたとき、$AAAが正常に出力できません。(なお、echo "" は、awkを走らせる為の単なるダミーです。) printの部分を ・awk '{print '$AAA'}' ・awk '{print "'$AAA'"}' などともしてみましたが、ダメでした。どのようにすればうまくいくでしょうか?

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

  • シェルプログラムの判定について

    皆さんのお知恵をお貸しください シェルはcshです 目的set name = $<で$nameに入る文字が+-*/(一文字毎です)の時エラー処理をしたい 現状下記のプログラムですが判定出来ません set xx = $< set moji = `grep -c '[\-\+\*\/]' xx` if ( $moji == 1 ) then echo 文字に誤りがあります endif  else if ( $moji == 0 ) then echo OKです endif +-*/が入った時にエラーを出したいのですが+-*/をどう判定したらよいのか教えて頂けます様お願い致します。

  • シェルでの強制終了

    通常で実行すると永遠と実行結果を出力するコマンドを、シェル内部にて実行して 内容をログに吐き出したいのですが停止方法がわかりません。 (ctrl+cと同じ事をシェル内部でやりたい。) #!/bin/sh prstat -t | awk '{print $2, $5}' > prstat.log 宜しくお願いします。

  • awkコマンドに引数を渡す方法

    awkコマンドに対して引数を渡す方法が知りたいです。 例えば以下のようなリストファイルがあったとします。 --------------------------------------- % cat test.lst 454 100 37536 200 32432 300 34q2 400 --------------------------------------- そこで以下のシェルを実行すると --------------------------------------- #!/bin/sh for VAL in 100 200 300 do CNT=`cat test.lst | awk '$2 == $VAL {print $1}'` echo "$VAL : $CNT" done --------------------------------------- awkコマンド内の$VALが引数ではなく文字列として認識されてしまうため、 出力結果が 100 : 200 : 300 : となってしまいます。 100 : 454 200 : 37536 300 : 32432 という結果を出力したい場合(awk内の引数を有効にする場合)どうすればよいでしょうか? awkを使用しない方法もあるかと思いますが、今回はawkを使った方法を知りたいです。 宜しくお願い致します。