perl – 将“文件名”从文本文件传递到命令行,其中文件的每一行都是文件名

我正在运行以下代码

git log --pretty=format: --numstat -- SOMEFILENAME |
   perl -ane '$i += ($F[0]-$F[1]); END{print "changed: $i\n"}' \
      >> random.txt

这样做是需要一个名为“SOMEFILENAME”的文件,并将添加和删除行总量的总和保存到名为“random.txt”的文本文件中.

我需要在存储库中的每个文件上运行此程序,并且有一些方法.什么是一个简单的方法来做到这一点?

最佳答案 如果你想要每个文件的总数:

git log --pretty=format: --numstat |
   perl -ane'
      $c{$F[2]} += $F[0]-$F[1] if $F[2];
      END { print "$_\t$c{$_}\n" for sort keys %c }
   ' >random.txt

如果你想要一个总数:

git log --pretty=format: --numstat |
   perl -ane'
      $c += $F[0]-$F[1];
      END { print "$c\n" }
   ' >random.txt

他们各自的产出是:

.gitignore      22
Build.PL        48
CHANGES.txt     0
Changes 25
LICENSE 132
LICENSE.txt     0
MANIFEST        18
MANIFEST.SKIP   9
README.txt      67
TODO.txt        1
lib/feature/qw_comments.pm      129
lib/feature/qw_comments.xs      250
t/00_load.t     13
t/01_basic.t    85
t/02_pragma.t   56
t/03_line_numbers.t     37
t/04_errors.t   177
t/05-unicode.t  39
t/devel-pod-coverage.t  26
t/pod.t 17

1151
点赞