両方のファイルには、最低2000行の文字列と数値データの行があります。 file2.txt
からfile1.txt
に重複しないデータを追加する方法。 基本的に、file2には新しいデータ行がありますが、file1.txtに重複する行を追加しないようにしたいと考えています。unixの2つのファイルを比較して、デルタを1つのファイルに追加してください。
File1.txt
>これは、メイン・データ・ファイルFile2.txt
である>このファイルは、我々が一緒になってFILE1
おかげで、
両方のファイルには、最低2000行の文字列と数値データの行があります。 file2.txt
からfile1.txt
に重複しないデータを追加する方法。 基本的に、file2には新しいデータ行がありますが、file1.txtに重複する行を追加しないようにしたいと考えています。unixの2つのファイルを比較して、デルタを1つのファイルに追加してください。
File1.txt
>これは、メイン・データ・ファイルFile2.txt
である>このファイルは、我々が一緒になってFILE1おかげで、
ソート二つのファイルに追加する新しいデータを持っています重複を削除するには、-u
オプションを使用します。
sort -u File1.txt File2.txt > NewFile.txt && mv NewFile.txt File1.txt
は50,000行のデータファイルでこれを試していますが、メモリ使用量に関してはかなり効率的です。私はかなり速く出力ファイルを得ました。私はこれが私の場合の解決策だと思う。 – Vcode
@Barmer sort -uはレコードを実際にソートするのは何ですか? plsはほとんどの列が同じように見えますが、いくつかは異なっています。また、単語間の間隔が違うと、その行がユニークであるとみなされますか? – Vcode
ソートキーのレコードをソートします。デフォルトでは行全体であり、スペースは重要です。特定のフィールドにキーを変更したり、スペースや大文字/小文字を無視するオプションがあります。マニュアルページを読んでください。 – Barmar
あなたはこのように、grep
を使用することができます。
# grep those lines from file2 which are not in file1
grep -vFf file1 file2 > new_file2
# append the results to file1
cat new_file2 >> file1
Hmm。メモリ使用の観点から、これは潜在的に高価なにおいをする。 ( 'sort'は利用可能なメモリよりも多くのメモリが必要な場合にはディスク上の部分を保持するために作業を中断することができますが、パターンリストを保持したり、構造リストを構築しようとすると' grep'がどのように動作するのかよく分かりません例外的に大きいソースのリストからの正規表現)。 –
一方、これは既存の行の順序を保持し、ソートに時間を費やしません。ユースケースによっては、この3つの回答の中で、これが最良の解決策、または唯一の正しい解決策である可能性があります。 – hek2mgl
公正な議論。私がOPであり、この方法が私のファイルが時間の経過とともに変更される唯一の方法であれば、ファイル*を一度*ソートする費用を食べてから、その後にcommメソッドを使用する...しかし、あなたが正しい、ここにすべてのユースケースがあります。 –
別のオプションかのファイルは、単にいくつかの選択肢を持っているために、ソートされた(と私はcomm
を:)好き)
comm --check-order --output-delimiter='' -13 File1.txt File2.txt >> File1.txt
されます
awkを使用:
awk '!a[$0]++' File1.txt File2.txt
これは既に存在しているアプローチに比べてどのような利点がありますか? 'grep -vf'アプローチよりもメモリが非効率的です。これは、メモリ内の2番目のファイルにしかない偶数行を保存しますが、既存のファイルからの行だけを保存できるためです。どのような利点が追加されます。 –
行の順序は重要ですか?彼らは分類されていますか? – Barmar
注文は重要ではありません。 – Vcode