同じディレクトリにある他のファイルとファイルを比較したいです。
file1.txt
含む:
move 34#123#
get 11#278
put 33#29#567#23
file1.txt
ファイル1.txt
と2.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
:処理中に関連配列に発生項目を表示します。$1
a
($1 in a){++a[$1]}
:sumを処理するときに1.txt
連想配列に存在することを2.txt
確認し、存在する場合は数に1を加えます。$1
a
- 最後に、連想配列を繰り返して、
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