9

これは私の試みです

  • すべての*.javaファイルを検索
    find . -name '*.java'
  • 行数を数える
    wc -l
  • 最後の行を削除
    sed '$d'
  • wcAWKを使用して、出力の最大行数を検索します
    awk 'max=="" || data=="" || $1 > max {max=$1 ; data=$2} END{ print max " " data}'

次に、それを1行にマージします

find . -name '*.java' | xargs wc -l | sed '$d' | awk 'max=="" || data=="" || $1 > max {max=$1 ; data=$2} END{ print max " " data}'

どういうわけか、空白以外の行だけをカウントするように実装できますか?

4

4 に答える 4

22
find . -type f -name "*.java" -exec grep -H -c '[^[:space:]]' {} \; | \
    sort -nr -t":" -k2 | awk -F: '{print $1; exit;}'

空白以外の行の数も確認する場合は、awkコマンドをに置き換えます。head -n1


コマンドの内訳:

find . -type f -name "*.java" -exec grep -H -c '[^[:space:]]' {} \; 
'---------------------------'       '-----------------------'
             |                                   |
   for each *.java file             Use grep to count non-empty lines
                                   -H includes filenames in the output
                                 (output = ./full/path/to/file.java:count)

| sort -nr -t":" -k2  | awk -F: '{print $1; exit;}'
  '----------------'    '-------------------------'
          |                            |
  Sort the output in         Print filename of the first entry (largest count)
reverse order using the         then exit immediately
  second column (count)
于 2011-12-13T12:28:02.333 に答える
14
find . -name "*.java" -type f | xargs wc -l | sort -rn | grep -v ' total$' | head -1
于 2011-12-13T12:21:39.093 に答える
0

このようなものが機能する可能性があります:

find . -name '*.java'|while read filename; do
    nlines=`grep -v -E '^[[:space:]]*$' "$filename"|wc -l`
    echo $nlines $filename
done|sort -nr|head -1

(エド・モートンのコメントに従って編集。コーヒーが多すぎたに違いない:-))

于 2011-12-13T11:30:00.720 に答える
0

awkを使用してすべてのファイルのサイズを取得するには、次のようにします。

$ find . -name '*.java' -print0 | xargs -0 awk '
BEGIN { for (i=1;i<ARGC;i++) size[ARGV[i]]=0 }
{ size[FILENAME]++ }
END { for (file in size) print size[file], file }
'

空でない行の数を取得するには、size[]をインクリメントする行を条件付きにするだけです。

$ find . -name '*.java' -print0 | xargs -0 awk '
BEGIN { for (i=1;i<ARGC;i++) size[ARGV[i]]=0 }
NF { size[FILENAME]++ }
END { for (file in size) print size[file], file }
'

(空白のみを含む行を「空」と見なす場合は、NFを/^./に置き換えます。)

空でない行が最も多いファイルのみを取得するには、もう一度微調整します。

$ find . -name '*.java' -print0 | xargs -0 awk '
BEGIN { for (i=1;i<ARGC;i++) size[ARGV[i]]=0 }
NF { size[FILENAME]++ }
END {
   for (file in size) {
      if (size[file] >= maxSize) {
         maxSize = size[file]
         maxFile = file
      }
   }
   print maxSize, maxFile
}
'
于 2012-11-26T22:20:21.243 に答える