|
>> 4978 > find . -newer foo の方法を書いておきます。find を使わないなら、 > 昨日9時の日時 (20090323090000) を Time::Local で epoch time に > 直しておき、stat() が返す最終更新時刻と比較すればよいでしょう の方法を教えて欲しいのですが。 |
|
Bシェルで、sedを使って、フルパスからディレクトリとファイル名を 分割したいのですが良い方法を教えてください。 ファイル名を取り出すことは出来たのですが、パス名を取り出すこと ができません。 また、ルート直下「/txt.csv」のような場合だと、ファイル名が取り出せ ません。結果が、「/txt.csv」となってしまいます。「txt.csv」と したいのです。 ------------------------------------ FILE=/aaa/bbb/txt.csv echo ${FILE} | sed 's/\/.*\///g' FILE=/txt.csv echo ${FILE} | sed 's/\/.*\///g' FILE=txt.csv echo ${FILE} | sed 's/\/.*\///g' 環境は、 Solaris8 Bシェル |
|
>>4989 べた basename・dirname コマンドを使うのはダメですかね。 |
|
>>4990 68user >basename・dirname コマンドを使うのはダメですかね。 も考えましたが、 出来れば、使わない方法でと |
|
>>4991 べた 普通に考えると、それ専用のコマンドがあるんだからそれを使うべき。 sed でやりたいならこんな感じかなぁ? - ファイル名 echo ${FILE} | sed 's/.*\///g' - パス名 echo ${FILE} | sed 's/\(.*\/\)[\/]*/\1/g' |
|
>>4992 zsh > 普通に考えると、それ専用のコマンドがあるんだからそれを使うべき。 すみません。 > - パス名 > echo ${FILE} | sed 's/\(.*\/\)[\/]*/\1/g' が、上手くいきませんでした。 パス名がとれません。フルパスが返ってきます。 /aaa/bbb/txt.csv → /aaa/bbb/txt.csv /txt.csv → /txt.csv |
|
>>4992 zsh > 普通に考えると、それ専用のコマンドがあるんだからそれを使うべき。 すみません。 > - パス名 > echo ${FILE} | sed 's/\(.*\/\)[\/]*/\1/g' が、上手くいきませんでした。 パス名がとれません。フルパスが返ってきます。 それと、ファイル名のみ場合は、値がなしとしたいのですが。 /aaa/bbb/txt.csv → /aaa/bbb/txt.csv /txt.csv → /txt.csv |
|
>>4994 べた 失礼しました。↓でどうでしょうか? echo ${FILE} | sed -n -e 's#\(.*\)/[^/]*#\1#p' |
|
>>4996 zsh ありがとうございます。 パス名を取り出すことができました。 ただ、以下の様に場合、上手くいきません。 「FILE=/txt.csv」の場合 「/」となりません。 ブランクというか、改行します。 「/」だけ取り出すというのは無理なのでしょうか。 「FILE=txt.csv」の場合 ブランクとなります。 正しい動きなのでしょうか。 |
|
nawkのユーザ定義関数について教えて下さい。 nawkで、ユーザ定義関数を呼び出して編集を行っているのですが、 ユーザ定義関数内で編集した値を、パラメータで渡した変数に設定 して返却したいのでが値が返却されません。 ユーザ定義関数内では、渡した変数に値が設定されているのですが、 関数を抜けると値が設定されていません。 どうしてなのでしょうか。 それとも、無理なのでしょうか。 パラメータで渡した変数に設定して返すことができるのでしょうか。 環境 OS:Solairs8 シェル:Bシェル(sh) -------------------------------------------------------------- nawk -v OUT=${OutFile} -F"," ' BEGIN { count = 0+0; } function chk2(arg1,arg2,val) { sub(/^"*/,"",arg1); sub(/"*$/,"",arg1); sub(/^"*/,"",arg2); sub(/"*$/,"",arg2); val=sprintf("%s %s",arg1,arg2); } function chk1(arg1,val) { sub(/^"*/,"",arg1); sub(/"*$/,"",arg1); val=arg1; } { chk1($1,UserID); chk2($8,$9,Name); printf("%s,%s\n",UserID,Name); #printf("%s,%s\n",UserID,Name) >> OUT; count++; } END { printf("Output number : %d\n",count); }' ${FILE} |
|
>>4997 べた > 「FILE=/txt.csv」の場合 パス名末尾の / を出力しないようにしていたためですね。 echo ${FILE} | sed -n -e 's#\(.*/\)[^/]*#\1#p' こうすれば出力されると思いますが、 逆に /hoge/fuga.txt のような場合でも /hoge/ となります。 > 「FILE=txt.csv」の場合 パスが指定されていないので、ブランクで正しいと思っていますが。 (そういった条件もありませんでしたし。) >>4998 ふくし nawk は参照渡しできないはずなので、そういう書き方ではできません。 ただ nawk では、ユーザ関数の引数として定義された変数を除き、 すべてグローバル変数だと思うので、やろうとしていることはできます。 |
|
>>4997 べた ありがとうございました。 出力されました。 |
|
>>4999 zsh お礼先誤りですみません。 ありがとうございます。 >> 「FILE=txt.csv」の場合 > パスが指定されていないので、ブランクで正しいと思っていますが。 > (そういった条件もありませんでしたし。) No. 4994で、自分でファイル名のみの場合、値なしとしたいと 書いておきながら正しい動きなんですかと質問すみませんで した。 |
|
>>4998 ふくし えっ、Solairs8 の nawk って return を使えないんでしょうか? |
|
>>5002 sfish man には return [expr] と記載があったので、リターンコードを返すものだと思っていましたが、 確かに値を返すことも出来ました。こっちの方がいいですね。 |