9

awk引数として複数のファイルを指定したawk場合、2 つの特殊変数があります。

NR=すべてのファイルのすべての行に対応する行番号。

FNR=現在のファイルの行番号。

Perl では、 (すべてのファイルの行のうちの現在の行) に$.対応することを知っています。NR

FNRPerlにもAWKに匹敵するものはありますか?

コマンドラインがあるとしましょう:

perl -pe 'print filename,<something special which hold the current file's line number>'  *.txt

これにより、次のような出力が得られるはずです。

file1.txt 1
file1.txt 2
file2.txt 1
4

3 に答える 3

6

実際、eofドキュメントにはこれを行う方法が示されています。

# reset line numbering on each input file
while (<>) {
    next if /^\s*#/;  # skip comments
    print "$.\t$_";
} continue {
    close ARGV if eof;  # Not eof()!
}

すべてのファイルの最初の行を出力するワンライナーの例:

$ perl -ne 'print "$ARGV : $_" if $. == 1; } continue { close ARGV if eof;' *txt
于 2012-09-12T09:47:26.357 に答える
5

Perl にはそのような変数はありません。しかし、次のようなものを書けるようにするには、eofを勉強する必要があります。

perl -ne 'print join ":", $. + $sum, $., "\n"; $sum += $., $.=0  if eof;' *txt
于 2012-09-12T09:30:02.427 に答える