1

行が同じ順序である2つのcsvファイルF1とF2があり、F2からファイルF1とF2を比較して、変更/追加された行を抽出したいと考えています。

diff コマンドを試しましたが、変更が見られました。パターンを読み取って F2 から行を抽出するにはどうすればよいですか?

F1(ファイル1):

1234,Joe,pieter,joe@gmail.com,male,22
1235,Shally,Jonse,shally@yahoo.com,female,24
1235,Harry,poter,harry@gmail.com,male,21
1235,Helen,Jairag,helen@gmail.com,female,21
2585,Dinesh,Jairag,helen@gmail.com,female,21

F2(ファイル 2):

1234,Joe,pieter,joe@gmail.com,male,22
1235,Shally,Jonse,shally@yahoo.com,female,24
1235,Harry,Potter,harry@gmail.com,male,21
1235,Helen,Jairag,helen@gmail.com,female,21

実行されたコマンド:

diff F2 F1

出力:

3c3
< 1235,Harry,Potter,harry@gmail.com,male,21
---
> 1235,Harry,poter,harry@gmail.com,male,21
4a5
> 2585,Dinesh,Jairag,helen@gmail.com,female,21

ファイル F3 で期待される出力:

1235,Harry,poter,harry@gmail.com,male,21
2585,Dinesh,Jairag,helen@gmail.com,female,21
4

2 に答える 2

3
diff --changed-group-format='%<' --unchanged-group-format='' file1 file2
于 2012-08-22T09:29:41.840 に答える
1

File2 から変更/追加された行を抽出したいことを理解しています!
したがって、あなたの例では、File2 に変更された行が 1 つだけあり、File2 に追加された行はありません。
の基本的な呼び出しパターンdiffは でdiff old newあり、出力は更新するために何をする必要があるかを示しますold。したがって、File2 の違いを知るには、それを 2 番目の引数として使用します。-uにオプションを使用することをお勧めしますdiff。これにより、File1 で変更/追加する必要がある File2 のすべての行が得られ +、最初の位置は次のようになります。

diff -u File1 File2

与える

--- File1   2012-08-22 11:30:07.000000000 +0200
+++ File2   2012-08-22 11:30:25.000000000 +0200
@@ -1,5 +1,4 @@
 1234,Joe,pieter,joe@gmail.com,male,22
 1235,Shally,Jonse,shally@yahoo.com,female,24
-1235,Harry,poter,harry@gmail.com,male,21
+1235,Harry,Potter,harry@gmail.com,male,21
 1235,Helen,Jairag,helen@gmail.com,female,21
-2585,Dinesh,Jairag,helen@gmail.com,female,21

+ここで、最初の 2 行を除いてで始まる行のみをフィルタリングします。

diff -u data1 data2 | \
  awk 'NR > 2 && $0 ~ /^+/ {print substr($0,2)}'

1235,Harry,Potter,harry@gmail.com,male,21

またはその逆:

diff -u data2 data1 | \
  awk 'NR > 2 && $0 ~ /^+/ {print substr($0,2)}'

1235,Harry,poter,harry@gmail.com,male,21
2585,Dinesh,Jairag,helen@gmail.com,female,21
于 2012-08-22T09:56:21.083 に答える