2017-08-19 11 views
1

にファイル名合併後2回目以降のファイルから列の見出し行を削除することができますfirst.txtは、私は以下のように説明することがいくつかのコードを書きましたが、どのように私は2つのファイル

id名接点

1 ABC 7679876789

2 BCD 9867363675 ​​

ファイル名:SECOND.TXT

ID名の接触

3 CDE 7979436789

4 BGB 9845363675 ​​

両方のファイル(first.txtとSECOND.TXT)をマージした後、私は出力以下しまっ:

id名を連絡先

1 abc 7679876789

2 BCD 9867363675 ​​

id名接点

3 CDE 7979436789

4 BGB 9845363675 ​​

しかし、私は次のように出力したい:

id名接点

1 ABC 7679876789

2 BCD 9867363675 ​​

3 CDE 7979436789

4 9845363675 ​​

BGBだから、第二のファイルの最初の列IDの行を削除する必要があります。

+0

どのようにファイルを調べていますか? – chris85

答えて

0

あなたがマージされているときは、ヘッダ行をスキップすることができます。

awk 'FNR==1 && NR > FNR {next}; 1' first.txt second.txt 

これは、最初の行のような行を探し、その行を削除し、マージよりも簡単です。

Wehen両方のファイルが同じヘッダを持ち、ヘッダがデータ行ではありません、あなたがawkをせずに

awk 'remembered==$0 {next} FNR==1 {remembered=$0} 1' combined.txt 

を使用することができますあなたはスキップする行を見つけるためのhead -1を使用してのようなより多くの処理を行う必要があるとこのようなプロセスは

sed '1p; /id name contact/d' combined.txt 

# Or with headrow=$(sed -1q combined.txt) 
sed "1p; /$headrow/d" combined.txt 
+0

sed '1p;/id name contact/d 'combined.txtこれはOKですが、id nameに一致するすべての行を右クリックして削除できます。しかし、私は最初のファイルではない2番目のファイルからそれらの行を削除する必要があります –

+0

それを組み合わせた後、どの行が最初のファイルの一部であるかを知ることは難しいです。正しい行だけをマージしてみてください。何か 'cat first.txt <(sed '1d' second.txt)> combined.txt'または上記のawkです。 –

+0

しかし私の側では、ディレクトリから同様の名前のファイルを抽出し、それらのファイル名を1つのファイルに格納し、それらのファイル名を1つずつ抽出し、そのファイル名にcatを適用してから同じファイル名を持つデータを、ファイル**(FinalMerge.txt)** –

1

これはあなたを助けるが、新しいファイルを作成します

cat file1.txt file2.txt | awk '!seen[$0]++'>file3.txt 
+0

これにより、ヘッダ行だけでなく、他のすべての重複レコードもパージされます。 –

+0

要件ごとに私はちょうどショットを与え、このスクリプトは重複する行だけをパージします。 – Guardian

関連する問題