GNU/Linux >> Linux の 問題 >  >> Linux

2つのファイル間の共通行?

この質問にはすでに回答があります :2つのテキストファイル(diffの反対)の共通行(類似点)を出力しますか?

(5つの回答)
3年前に閉じられました。

ターミナルで実行する次のコードがあります。

LC_ALL=C && grep -F -f  genename2.txt hg38.hgnc.bed > hg38.hgnc.goi.bed

これでは、2つのファイル間の共通線はわかりません。何が足りないのですか?

承認された回答:

comm -12 file1 file2を使用します 両方のファイルで共通の行を取得します。

また、ファイルをcommに並べ替える必要がある場合もあります。 期待どおりに機能します。

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

man commから :

-1     suppress column 1 (lines unique to FILE1)
-2     suppress column 2 (lines unique to FILE2)

またはgrepを使用する -xを追加する必要があるコマンド 一致パターンとして行全体を一致させるオプション。 F オプションはgrepに指示しています 正規表現の一致ではなく、文字列としてパターンに一致します。

grep -Fxf file1 file2

またはawkを使用する 。

awk 'NR==FNR{seen[$0]=1; next} seen[$0]' file1 file2

これはfile1の全行を読んでいます seenという配列に キーを1行全体として(awk内) $0 現在の行全体を表します。

NR==FNRを使用しました 最初の入力に対してのみ後続のブロックを実行する条件としてfle1 file2ではありません 、NR awkで 現在の処理行番号とFNRを参照してください allの現在の行番号を参照しています 入力。したがって、NR 入力ファイルごとに一意ですが、FNR すべての入力に対して一意です。

next awkに伝えていますか 残りのコードを続行せず、NRまで再開します FNRと等しくない つまり、 file1のすべての行を意味します awkによって読み取られます 。

次に次のseen[$0] 2番目のfile2に対してのみ実行されます file2の各行 配列を調べて、配列内に存在する場所にその行を出力します。

もう1つの簡単なオプションは、sortを使用することです。 およびuniq

sort file1 file2|uniq -d

これにより、両方のファイルが並べ替えられてからuniq -dが出力されます。 重複した行のみを印刷します。ただし、これは、両方のファイル自体に重複する行がない場合に許可されます。それ以外の場合は、両方のファイル内に重複する行がある場合でも、以下が常に許可されます。

uniq -d <(sort <(sort -u file1) <(sort -u file2))

Linux
  1. 2つのパターン間の(および除外する)行を印刷しますか?

  2. 2 回の間に作成されたファイルを削除するには?

  3. 2 つのサーバー間で大量のファイルをすばやくコピーする方法

  1. 2つのパターンの間(およびそれを含む)の線を印刷しますか?

  2. 2つのファイルを2つの列に印刷しますか?

  3. 2つのリモート間でファイルをRsyncする方法は?

  1. 異なるファイルの2つの列を比較し、一致する場合は印刷しますか?

  2. 2つのテキストファイル(差分の反対側)の共通行(類似点)を出力しますか?

  3. Linuxで2つのファイルの違い(追加のみ)を取得する方法