他のファイルの最初の列の比較 [閉じる]

他のファイルの最初の列の比較 [閉じる]

同じディレクトリにある他のファイルとファイルを比較したいです。

file1.txt含む:

move 34#123#    
get 11#278    
put 33#29#567#23

file1.txtファイル1.txt2.txt

1.txt含む:

move 11    
put 34    
run 13

2.txt含む:

get 14    
move 66

私に必要な結果は次のとおりです。

move 2    
get 1    
put 1

どうすればいいですか?

ベストアンサー1

解決策は次のとおりですawk

$ awk 'FNR==NR{a[$1];next}($1 in a){++a[$1]}
    END{for(i in a){print i" "a[i]}}' file1.txt 1.txt 2.txt
put 1
get 1
move 2

説明する

  • FNR==NR{a[$1];next}file1.txt:処理中に関連配列に発生項目を表示します。$1a
  • ($1 in a){++a[$1]}:sumを処理するときに1.txt連想配列に存在することを2.txt確認し、存在する場合は数に1を加えます。$1a
  • 最後に、連想配列を繰り返して、aキー(ファイルの最初のフィールド)とその値(1.txt合計で発生した回数2.txt)を印刷します。

perl同じロジックを使用する別の解決策は次のとおりです。

$ perl -alne '++$i;                  
    if ($. == $i) {
        $h{$F[0]}=0;
        close ARGV if eof;
        next;
    }
    ++$h{$F[0]} if defined $h{$F[0]};
END {
    for (keys %h) {
        print $_." ".$h{$_};
    }
}' file1.txt 1.txt 2.txt
move 2
get 1
put 1

おすすめ記事