私はこの分野に慣れておらず、それぞれ2つの列(「Position」と「Poly」)のタブで区切られた50000個のファイルを比較してマージしたいと思います。 file1とfile2(および他のファイル)の例と私が探している最終出力は次のとおりです。
ファイル1:
位置ポリ 100001℃ 228201T 341791T 380441C 392640トン 459055A 459079 電話 480253T 570405トン 492633A
ファイル2:
位置ポリ 100001℃ 312002C 341791T 380441C 412640A 459055A 459079 電話 464056T 570405トン 492633A
出力:
場所ファイル1ファイル2 100001CC 228201ティー 312002-C 341791TT 380441CC 392640ティー- 412640-A 459055AA 459079電信送金送金 480253ティー- 464056-T 570405TT 492633AA
基本的に私はそれらを単一の行列に変換し、ファイルに場所がない場合はダッシュを追加したいと思います。
ベストアンサー1
join
GNU関数coreutils
はほぼ何をしたいですか - 両方のファイルが同時に欠落している現象を処理する方法が見つかりませんが、
sort -u \
<(join --header --nocheck-order -t$'\t' -a1 -o 1.1,1.2,2.2 -11 -21 -e'-' file1 file2) \
<(join --header --nocheck-order -t$'\t' -a2 -o 2.1,1.2,2.2 -11 -21 -e'-' file1 file2)
100001 C C
228201 T -
312002 - C
341791 T T
380441 C C
392640 T -
412640 - A
459055 A A
459079 T T
464056 - T
480253 T -
492633 A A
570405 T T
Position Poly Poly
ヘッダー行は一番下に並べられます。これが問題の場合は、パイプsed '$d'
または削除できますhead -n -1
。あるいは、ソートされていない出力が許可されている場合は、ieの代わりに重複するawk
エントリsort -u
を削除することもできます。
awk '!a[$1]++' \
<(join --header --nocheck-order -t$'\t' -a1 -o 1.1,1.2,2.2 -11 -21 -e'-' file1 file2) \
<(join --header --nocheck-order -t$'\t' -a2 -o 2.1,1.2,2.2 -11 -21 -e'-' file1 file2)
Position Poly Poly
100001 C C
228201 T -
341791 T T
380441 C C
392640 T -
459055 A A
459079 T T
480253 T -
570405 T T
492633 A A
312002 - C
412640 - A
464056 - T