1

このパターンに一致しない行を出力しながら、ファイル内の特定のパターンに一致する行に行カウンターを追加する必要があります。

たとえば、ファイルが次のようになっているとします。

aaa 123
bbb 456
aaa 666
ccc 777
bbb 999

カウントしたいパターンは「aaa」と「ccc」です。次の出力を取得したいと思います。

1:aaa 123
bbb 456
2:aaa 666
3:ccc 777
bbb 999

できれば、Linux のワンライナーを探しています。ほとんどのディストリビューションにデフォルトでインストールされている限り、シェルやツールは問題ではありません。

4

2 に答える 2

2

次のコードを使用します。次のアプローチはperlにあります

open FH,"<abc.txt";

$incremental_val = 1;

while(my $line = <FH>){
  chomp($line);

  if($line =~ m/^aaa / || $line =~ m/^ccc /){
    print "$incremental_val : $line\n";
    $incremental_val++;
    next;
  }
  print "$line\n";
}

close FH;

出力は次のようになります。

1 : aaa 123
bbb 456
2 : aaa 666
3 : ccc 777
bbb 999
于 2013-07-01T09:04:40.093 に答える
2

awk:

awk '{if ($1=="aaa" || $1=="ccc") {a++; $0=a":"$0}} {print}' file
1: aaa 123
bbb 456
2: aaa 666
3: ccc 777
bbb 999

説明

aaa最初のフィールドがまたはであるかどうかをチェックする行をループしますccc$0その場合は、行 ( ) に変数を追加し、a自動インクリメントします。最後に、すべての場合の行を印刷します。パターンが一致した場合aは先頭に、そうでない場合は元の行だけが表示されます。

于 2013-07-01T09:09:39.097 に答える