2つのファイルの共通ラインと2つのファイルの共通ラインを1つの出力ファイルに出力します。

2つのファイルの共通ラインと2つのファイルの共通ラインを1つの出力ファイルに出力します。

2つのテキストファイルがあります。名前をfile1.txtとfile2.txtとして指定します。

file1.txtは次のようになります

chr10   181144  225933
chr10   181243  225933
chr10   181500  225933
chr10   226069  255828
chr10   255989  267134
chr10   255989  282777
chr10   267297  282777
chr10   282856  283524
chr10   283618  285377
chr10   285466  285995

file2.txtは次のようになります

chr10   181144  225933
chr10   181243  225933
chr10   181500  225933
chr10   255989  282777
chr10   267297  282777
chr10   282856  283524
chr10   375542  387138
chr10   386930  387138
chr10   387270  390748
chr10   390859  390938
chr10   391051  394580
chr10   394703  395270

単一ファイルとして出力したいのは

  1. file1とfile2の間のすべての共通行
  2. 両方のファイルに共通していないfile1のすべての行
  3. 両方のファイルに共通ではないfile2のすべての行。

私はこれを行うためにPerlスクリプトを書いたが、コマンドラインまたはより簡単な方法があると確信しています。

ベストアンサー1

両方のファイルに共通する行は次のとおりです。

comm -12 file1.txt file2.txt > results.txt

file1.txtに関連する行を追加します。

comm -23 file1.txt file2.txt >> results.txt

file2.txtに関連する行を追加します。

comm -13 file1.txt file2.txt >> results.txt

ファイルがまだソートされていない場合、たとえばシェルがプロセス置換をサポートしている場合は、事前にソートする必要があります。

comm -12 <(sort file1.txt) <(sort file2.txt)

など。

おすすめ記事