68user's page 掲示板

Prev< No. 4513〜4518> Next  [最新発言に戻る] [過去ログ一覧]
No. 4514 # ロー 2006/02/11 (土) 18:39:14
UNIXのシェルで2点教えて頂きたいことがあります。

●1点目
sedコマンドを使用して置換したいのですが、sed内で変数は
使用可能なのでしょうか。

-----------------
#!/bin/sh

DIR="/home/guest/"
ls ${DIR}*.CSV | sed 's/$DIR}//g'

置換されずにそのまま出力されます。
シェル内の変数を、sedに渡して置換させることは可能なのでしょうか。

ls ${DIR}*.CSV | sed 's/\/.*\///g'
削除した部分がディレクトリと言う事なので、「's/\/.*\///g'」として
みたのですが、正しい使い方なのでしゅか。

●2点目
変数に格納されているファイル名から番号が一番大きいファイル名
を作りたいのですが、awkを使用して簡単にできますか。

例えば、/tmp配下に、
test0001.CSV
test0002.CSV
test0004.CSV
とファイルがあるとします。
ls、変数に格納し、awk等で、「test0005.CSV」を求めたいのですが。

---------
#!/bin/sh

FileLst=`ls /tmp/*.CSV`
echo $FileLst | awk ?????

No. 4515 # ロー 2006/02/11 (土) 18:41:13
>>4514 ロー
環境を書き忘れました。

UNIX:Soralis8
シェル:Bシェル

No. 4516 # 68user 2006/02/13 (月) 11:45:19
UNIX の部屋 http://x68000.q-e-d.net/~68user/unix/ を更新しました。

>>4460 mkt
> ・fgrep と Gimp の解説文が途中で切れてしまっているように思います。
fgrep については、とりあえず掲示板での発言にリンクを張りました。
    http://x68000.q-e-d.net/~68user/unix/pickup?fgrep

> ・記号の 2 項目め(「"」の項と思われる部分)の見出し行が抜け落ちてしまってます。
正しく表示されるようにしました。
    http://x68000.q-e-d.net/~68user/unix/pickup?%22

" の解決のため、10年近くつぎはぎでやってきた汚い部分を全面的に見直し
たため、もしかしたら UNIX の部屋の検索部分にエンバグしている可能性が
あります。怪しい挙動を見つけられた方は教えていただけると幸いです。

>>4501 hidemaru
> SSLv3のハンドシェイク処理の部分を実際に(Cで)実現する方法
>>4502 hidemaru
> 環境は、vine linux 、 openssl-0.9.7d-0vl3.2 です。
OpenSSL を使っていいなら SSL_connect(3) を使えばいいですし、OpenSSL を
使わないなら「環境は OpenSSL」とわざわざ書く理由がわからないです。

>>4508 dynamite
> SSL_shutdown()で0を返しERR_print_errors_fp には何も出力しないと
> 推測しているのですが
わたしもよくわかってませんが調べる時間がないです。すみません。
マニュアルにそう書いてありますか?

>>4511 blueeyes
> 本来welcome to hostname のところは今welcome to 1になりました。
原因はわかりません。リブートしても同じ挙動かどうか、シングル
ユーザモードで起動するとどうなるか、/var/log に何か出ていないかを
確認してください。

>>4514 ロー
> ls ${DIR}*.CSV | sed 's/$DIR}//g'
'' で囲んだら変数展開されないので、"" で囲みましょう。変数展開できた
としても s//home/guest///g は sed 的にエラーですが、これはまた別の話。

> ls、変数に格納し、awk等で、「test0005.CSV」を求めたいのですが。
「ls で表示したときに最後に表示される行」とみなせるのであれば、
    echo $FileLst | awk '{print $NF}'
など ($NF は gawk では動きましたが、一般的な awk で使用できるかどうかは
わかりません)。

まぁ、awk には列で渡すのではなく、行で渡した方が幸せだと思うので、
    ls /tmp/*.CSV | awk 'END { print }'
の方がいいと思います。とか言い出すと、
    ls /tmp/*.CSV | tail -1
でいいじゃん、って話になりますけどね。

No. 4517 # ロー 2006/02/13 (月) 13:22:09
>>4516 68user

ありがとうございます。
>> ls ${DIR}*.CSV | sed 's/$DIR}//g'
>'' で囲んだら変数展開されないので、"" で囲みましょう。変数展開できた
>としても s//home/guest///g は sed 的にエラーですが、これはまた別の話。
ダブル「""」で囲んだら展開されませんでした。シングル「''」で囲んだら展開
されました。

> echo $FileLst | awk '{print $NF}'
>など ($NF は gawk では動きましたが、一般的な awk で使用できるかどうかは
>わかりません)。
一般的なawkでも使用できました。

>ls /tmp/*.CSV | awk 'END { print }'
は、ダメでした
結果が得られませんでした。

No. 4518 # zsh 2006/02/15 (水) 11:38:18
>>4512
FNR に現在処理しているファイルのカレントレコード番号が
セットされるのに対して、NR には (n)awk が実行されてから
読み込んだレコード数がセットされています。
  $ nawk '{ print "NR:" NR "/FNR:" FNR }' a.txt b.txt
等とすれば違いが確認できると思います。

>>4517 ロー
Solarisの(n)awkでは
  $ /tmp/*.CSV | awk '{ f=$0; } END { print f }'
のようにしないといけないようです。

Prev< No. 4513〜4518> Next  [最新発言に戻る] [過去ログ一覧]