- ベストアンサー
unixのコマンドで+を付けたい
unixのたとえば、 grep "#E200#" file1|cut -d# -f1 とかで 43 78 23 17 とかの数字を出してきて、これを 43+78+23+17 になるように+をつけるには どんなコマンドがよろしいでしょうか? trを使ってなんかできませんでしょうか? これができたら、TOTAL=43+78+23+17でコマンド代入 にして bc scale=2 $TOTAL 161 quit したいのですが。 よろしくお教えください。(unix 超初心者です)
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
file1の中の改行コードがCRLF(Windows)と、LF(Linux)が混在してるんですかね。 grep "#E200#" file1|cut -d# -f1|tr '\n' +|tr -d '\r'|sed 's/+$//' と、CR を削除してみましょう。
その他の回答 (5)
- notnot
- ベストアンサー率47% (4900/10358)
#4です。 >ここのところがうまく作用しません sed 's/+$//' 具体的な現象を書いてください。 grep "#E200#" file1|cut -d# -f1|tr '\n' + で、数+数+数+ となって、 grep "#E200#" file1|cut -d# -f1|tr '\n' +|sed 's/+$//' で、数+数+数 となるのが正常です。 それぞれどうなるのですか?
お礼
ひょっとして(実際は、バリアブルを使ってました) empid=200 -bash-3.2$ grep "$empid#" file1|cut -d# -f1|tr '\n' + 40+32+32+11+-bash-3.2$ -bash-3.2$ grep "$empid#" file1|cut -d# -f1|tr '\n' +|sed 's/+$//' 200をバリアブルにした$とsedのアンカーの$を何かコマンドが勘違いしてるのでしょうか?
補足
ご心配していただき感謝してます。 -bash-3.2$ grep "#E200#" file1|cut -d# -f1|tr '\n' + 40+32+32+11+-bash-3.2$ -bash-3.2$ grep "#E200#" file1|cut -d# -f1|tr '\n' +|sed 's/+$//' は、何もでてきません、CTRL+cをして元にもどしてます。 ということなんです。
- notnot
- ベストアンサー率47% (4900/10358)
tr '\n' + で、改行を+に置換することは出来ますが、最後にも+が付いてしまいます。それを取るとなると、 grep "#E200#" file1|cut -d# -f1|tr '\n' +|sed 's/+$//'|bc のようにだんだん長くなってしまいます。 awkを使うと、 awk -F# '/#E200#/{sum+=$1}END{print sum}' file1 と1つのコマンドで出来ます。 処理速度が問題にならない場合、単機能のコマンドをたくさん組み合わせて処理するのと、高機能のコマンド(Perlとか)で一発で処理するのとは好みの問題ですかね。 なお、bcのscale=2は、小数点以下2桁まで計算しろと言うことなので、整数だけの計算なら不要です。
補足
ここのところがうまく作用しません sed 's/+$//' なぜでしょう?
- Tacosan
- ベストアンサー率23% (3656/15482)
いっそ面倒なので | (s=0; while read x; do s=`expr $s + $x`; done; echo $s) とか.
お礼
ありがとうございます、まだちょっとわたしには難しそうですが、これからがんばって勉強します。本当にありがとうございました。
- ssk38
- ベストアンサー率44% (22/49)
| while read i; do echo -n "$i+"; done とすればできます。
お礼
ありがとうございます、まだちょっとわたしには難しそうですが、これからがんばって勉強します。こういうのも覚えなきゃいけませんね。親身になって教えていただきありがとうございました。
- mendokusa
- ベストアンサー率13% (359/2726)
awkあたりがよさそうな気がします。
お礼
awkもこれから勉強します、親切なご回答ありがとうございました。
お礼
ご心配かけて申し訳ありませんでした。 どうもsedが相性悪いようで。 work=`grep "$empid#" file1|cut -d# -f1|tr '\n' +` echo $work|sed 's/+$//' でやってみたら、最後の+が消えました。 それで echo $work|sed 's/+$//'|bc にしましたら足し算をしてくれました。 お骨折りありがとうございました。
補足
Dame desu. nanimo dete kimasen. tadaima america no bousho no computer de yattemasunode roma-zi nandesuga.