2017-04-09 4 views
1

私はls -althからこのようないくつかの出力を持っている:regexをコマンドラインでカットするには?

drwxr-xr-x 5 root admin 170B Aug 3 2016 .. 
drwxr-xr-x 5 root admin 70B Aug 3 2016 .. 
drwxr-xr-x 5 root admin  3B Aug 3 2016 .. 
drwxr-xr-x 5 root admin  9M Aug 3 2016 .. 

は今、私は明らかに人間が読める形式のサイズです170B一部を、アウト解析します。私はcutまたはsedを使ってこれをやりたかったのです。なぜなら、必要以上に複雑で難しいツールを使いたくないからです。

は、理想的には私はサイズが付属しています BMまたは Kサフィックスを処理するのに十分堅牢で、それに応じて 110000001000により適宜掛けたいです。私はそれをする良い方法を見つけていない。

は、私は本当に最善のアプローチを知らなくても、いくつかのことを試してみた:私はちょうど1つ以上のスペース上でそれを区切ることができるだろうので、それが働くだろう期待していた

ls -alth | cut -f 5 -d \s+ 

しかし、それは動作しません。どのようにしてcutに正規表現デリミタを指定しますか?または、ファイルのサイズのみをls -althから抽出する方が簡単ですか?

私はCentOS6.4

この答えはを尋ねて質問 に取り組ん
+0

なぜだけではなく、 'lsの-althでデュの結果を解析することができます|カット-d」" -f5' ..? –

+0

私は実際にそのオプションについて聞いたことがありません。これは、任意の数のスペースで分割する必要があるため機能しません。あなたの例は1つのスペースでのみ分割されます。私はもう少し明確にするために、いくつかの例を追加しました。 – guimption

+1

OK then ... 'ls -alth | awk '(print $ 5)' 'はどうですか?これはデフォルトでは空白で動作します。ところで、私のDebianでカットされた作品でさえ。 –

答えて

2

を使用しますが、潜在的に優れた代替としてGeorge Vasiliou's helpful find solutionを検討しています。

  • cutのみ区切り記号(-d)として単一リテラル文字をサポートしていますので、使用する権利ツールではありません。行あたりの空白の可変量と分離されているトークン(フィールド)を抽出するため

  • awkが最良のツールであるため、George Vasiliouによって提案された解決策は、最も単純なものである:
    ls -alth | awk '{print $5}'
    は5 whitespace-を抽出区切られたフィールド($5)、これはサイズです。

  • よりもむしろ-h最初を使用して、(ちなみに、乗算器は1024、ない1000の倍数でなければなりません)バック単なるバイトカウントする(例えばBM、およびGなど)人間が読めるサフィックスを再変換awkのソリューション股関節に
    ls -alt | awk '{print $5}'

+1

@GeorgeVasiliou:いいアイデアです。自分の答えを作ることをお勧めします。 – mklement0

+1

これは実際には 'ls -alth'から' -h'フラグを省略することができます。私はそれを考えなかった。 – guimption

2

オルタナティブ:、単にデフォルトでは、生のバイト数を出力しlsコマンドから-hを省略空白を正しく処理するには、lsと似た結果を提供するfindユーティリティを使用することもできます。

find実際にはcutまたはawkのような他のツール/パイプを必要とせずに結果のサイズを直接表示することができます。

だから、あなたが使用することができ単なるバイト一覧表示するには:

$ find . -maxdepth 1 -printf %s\\n 
173 
3 
684 

あなたは-printfの下で利用可能なオプションの多くを見るためにman findに相談することができます

$ find . -maxdepth 1 -printf %f-%s\\n 
bsd.txt-173 
file4-3 
shellcolors.sh-684 

で検索して、ファイル名+バイトを組み合わせることができます。

また、-maxdepthオプションを削除することで、サブディレクトリ内のすべてのファイルの一覧を表示することもできます。

$ du -a -b -h -d1 
1.9M ./appsfiles 
173 ./bsd.txt 
3 ./file4 
684 ./shellcolors.sh 

-a:すべてのファイルとディレクトリ

もう一つの選択肢は、それは人間が読める形式で結果を提供することができ、duユーティリティを使用することです。このオプションを削除すると、このファイルのディスクサイズが報告されます(実際には3KBのファイルが実際には4KBを占める)。
-h:人間が判読できるサイズ
-d1:depth1

あなたはさらに|cut -d" " -f1または|awk '{print $1}'

関連する問題