at_shiita.ishigaki
2021年10月15日 8時47分
ソートされているファイルの各行を比較するにはcommコマンドを使用します。
※ここでは例として、a.txtとb.txtを比較します。
[armadillo ~]# cat a.txt
abc
defg
hij
[armadillo ~]# cat b.txt
abc
defg
hijk
lmn
[armadillo ~]# comm a.txt b.txt
abc
defg
hij
hijk
lmn
commコマンドの出力は、1列目に1つ目のファイルのみに含まれている行、2列目に2つ目のファイルのみに含まれている行、3列目にどちらのファイルにも含まれている行となります。
出力される区切り文字を変更するには--output-delimiterオプションを使用します。
※ここでは例として、区切り文字を","にします。
[armadillo ~]# comm a.txt b.txt --output-delimiter=,
,,abc
,,defg
hij
,hijk
,lmn
以下のようにファイルがソートされていない場合、エラーが表示されることがあります。
※ここではb.txtの1行目を4行目に移動させています。
[armadillo ~]# cat b.txt
defg
hijk
lmn
abc
[armadillo ~]# comm a.txt b.txt
abc
defg
hij
hijk
lmn
comm: file 2 is not in sorted order
abc
この場合、事前にソートすることでエラーになりません。
[armadillo ~]# comm a.txt <(sort b.txt)
abc
defg
hij
hijk
lmn