0

以下に示すように、2つのファイルを結合して、新しい列にインデックスを付けたいと思います。

ファイルA

apple     1 2 3 4 5 6
banana    3 2 4 4 5 6
orange    2 3 4 5 6 7
pear      2 4 5 6 3 5

ファイルB

apple    1 3 4 5 6 7
grapes   4 5 6 4 3 6
melon    3 4 5 2 5 1
orange   2 4 5 6 7 8

最初の2つの列に基づいて2つのファイルを比較し、ファイルAから共通の行を出力してから、ファイルAとファイルBの両方から一意の行を追加し、以下に示すようにインデックスを付けます。

出力:

apple     1 2 3 4 5 6 both
orange    2 3 4 5 6 7 both
banana    3 2 4 4 5 6 fileA
pear      2 4 5 6 3 5  fileA
grapes   4 5 6 4 3 6   fileB
melon    3 4 5 2 5 1   fileB
4

1 に答える 1

0

comm2つのファイルを比較し、どちらの行が一方、他方、または両方で発生するかを報告します。

comm -2 <(cut -f1 -d' ' fileA | sort)
        <(cut -f1 -d' ' fileB | sort) \
  | sed $'/\t/{s/$/ both/;s/\t//};/ /!s/$/ fileA/' \
  | join -o1.1,2.2,2.3,2.4,2.5,2.6,2.7,1.2 - fileA \
  | sort -k8
cut -f1 -d' ' fileA \
  | grep -vFf- fileB \
  | sed 's/$/ fileB/'

ご覧のとおり、パイプラインはかなり複雑です。コードに変更を加える予定がある場合は、Perlなどのより強力な言語への移行を検討してください。

于 2012-11-06T21:10:12.607 に答える