1

「ls-l」コマンドの出力からファイル名とそのサイズのリストを取得するために、cutコマンドを使用しようとしました。

$ ls -l | cut -f 5,9 -d " "

区切り文字として「SINGLEWHITESPACE」に基づいた出力が得られます。「ls-l」出力に特定の行に連続したスペースが含まれている場合、コマンドの出力はそれらの行に対して適切ではありません。列区切り文字として空白が1つしかない行は、正しい出力を提供します。

次のコマンドを実行すると:

$ ls -l | awk '{ print $5"\t"$9 }'

awkは複数のスペースを無視し、「ls-l」出力から列を適切に抽出しています。一方、cutは各スペースを区切り文字として扱いますが、間違った列に値を入力します。

すべての行に正しい出力を提供します。

なぜこうなった ?カットコマンドでこれを解決するにはどうすればよいですか?

4

3 に答える 3

6

awkは空白のフィールドを分割します。cutは、区切り文字のフィールドを分割します。awkはこの問題に適したツールです。

ls -l別の方法として、複数のスペース文字を圧縮するユーティリティ(多分tr -s)、または複数のスペース文字を単一のスペース文字に置き換えるユーティリティ(多分)にパイプすることができますsed次に、カットはあなたが望むことをします。

于 2013-01-14T19:08:14.680 に答える
4

解析しないでくださいls。スペースが含まれている場合、コードは完全なファイル名を出力しません。ファイルのサイズと名前を取得するには、次を使用しますstat

stat -c "%s %n" *
于 2013-01-14T21:33:03.993 に答える
3

これを試して?:

ls -l | tr -s ' ' | cut -d ' ' -f 5, 9 
于 2013-01-14T19:08:04.093 に答える