BBS-complangawk/323

トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

Print all but the filename - Jeff Kloek (2006年07月01日 23時40分00秒)

ファイル名を取り除いて、ディレクトリ名だけにする方法はありますか?

http://groups.google.co.jp/group/comp.lang.awk/browse_frm/thread/e5f62f42bd875519/e299f191efe0f13f?hl=ja#e299f191efe0f13f


Re: - Ted Davis (2006年07月01日 23時40分44秒)

OS が分からないと、やり方が異なりますので、答えられません。

Re: - Jeff Kloek (2006年07月01日 23時41分58秒)

AIX です。

"ls -Rl" の結果を処理したいのです。

Re: - Cesar Rabak (2006年07月01日 23時42分32秒)

$ls -Rl | awk '/^d/'

で処理できます。

Re: - Jon LaBadie? (2006年07月01日 23時44分13秒)

ファイル名が $9 であるとすれば、以下のようにします。

ls -lR |
awk '
{ for(n=9; n<= NF; n++
      $n = ""
   print
}'

Re: - Jeff Kloek (2006年07月01日 23時45分16秒)

"ls -Rl" の結果ではなく find の結果でした。

Re: - Chris F.A. Johnson (2006年07月01日 23時45分46秒)

find . -type d -print

でできます。

Re: - Jeff Kloek (2006年07月01日 23時47分37秒)

/share/doc/freetype-2.0.1/docs/glyphs/glyphs-7.html
/share/doc/freetype-2.0.1/docs/glyphs/grid_1.png
/share/doc/freetype-2.0.1/docs/glyphs/index.html
/share/doc/freetype-2.0.1/docs/glyphs/points_conic.png
/share/doc/freetype-2.0.1/docs/glyphs/points_conic2.png
/share/doc/freetype-2.0.1/docs/glyphs/points_cubic.png
/share/doc/freetype-2.0.1/docs/glyphs/points_segment.png
/share/doc/freetype-2.0.1/docs/glyphs/twlewis1.png
/share/doc/freetype-2.0.1/docs/glyphs/twlewis2.png
/share/doc/freetype-2.0.1/docs/glyphs/up_flow.png
/share/doc/freetype-2.0.1/docs/image
/share/doc/freetype-2.0.1/docs/image/freetype.jpg
/share/doc/freetype-2.0.1/docs/tutorial

の個々のディレクトリ名が欲しいのです。

Re: - Jon LaBadie? (2006年07月01日 23時48分29秒)

OT ですが、

sed -e 's/\/[^/]*$//'

のようにしてみてください。

Re: - William James (2006年07月01日 23時49分59秒)

以下のようにしてできます。

awk '{sub( "/[^/]*$" , x )}8'

Re: - Ed Morton (2006年07月01日 23時52分31秒)

いくつでも生成してよいなら以下のようにします。

$ awk 'sub(/\/[^/]*$/,"")' file
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs/glyphs

ユニークなものだけでよいなら、

$ awk 'sub(/\/[^/]*$/,"")&&!f[$0]++' file
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs
/share/doc/freetype-2.0.1/docs/image

のようにします。

Re: - Bob Harris (2006年07月01日 23時53分26秒)

以下のもので良いのではないでしょうか?

find . -print | awk -F/ -v OFS=/ '{$NF="";print}'

Re: - Jeff Kloek (2006年07月01日 23時55分18秒)

以下のものでうまく動作しました。

rev file1 |cut -d'/'  f2  |rev >file2

Re: - Chris F.A. Johnson (2006年07月01日 23時56分59秒)

どういうものが欲しいのかを提示してくれなければ、何も分かりませんよ。

それに、これは UNIX の標準コマンドではないです。

{{comment multi|w}}


Re: - さいとう (2006年07月02日 00時06分07秒)

え〜っと、「なんじゃこりゃ」というのは置いておいて、

rev file1 |cut -d'/'  f2  |rev >file2

ではなく、

rev file1 |cut -d/  -f2  |rev >file2

だと思われるのですが、これだとファイル名しか出ませんし、普通使わないと思うのですけどね。

AIX が Linux と比べて変わっている (正確には逆で Linux が変わっている) からでしょうかね。