私は2つのCSVファイルを用意しています。これは新しくフォーマットされたファイルと比較する必要があります。サンプルは以下の通りです。linux awkが2つのcsvファイルを比較し、フラグ付きの新しいファイルを作成する
OLDファイル
DTL,11111111,1111111111111111,11111111111,Y,N,xx,xx
DTL,22222222,2222222222222222,22222222222,Y,Y,cc,cc
DTL,33333333,3333333333333333,33333333333,Y,Y,dd,dd
DTL,44444444,4444444444444444,44444444444,Y,Y,ss,ss
DTL,55555555,5555555555555555,55555555555,Y,Y,qq,qq
NEWファイル
DTL,11111111,1111111111111111,11111111111,Y,Y,xx,xx
DTL,22222222,2222222222222222,22222222222,Y,N,cc,cc
DTL,44444444,4444444444444444,44444444444,Y,Y,ss,ss
DTL,55555555,5555555555555555,55555555555,Y,Y,qq,qq
DTL,77777777,7777777777777777,77777777777,N,N,ee,ee
出力ファイル
私は古いものと新しいCSVファイルを比較し、その変化を見つけたいです新しいファイルで影響を受け、FLAを更新しましたGこれらの変更
Uを示すために - 新しいファイルレコードが Dを更新した場合 - 古いファイル内の既存のレコードが新しいファイル Nに削除された場合 - 新しいファイルに既存のレコードがで利用できない場合古いファイル
サンプル出力ファイルはこれです。
DTL,11111111,1111111111111111,11111111111,Y,Y,xx,xx U
DTL,22222222,2222222222222222,22222222222,Y,N,cc,cc U
DTL,33333333,3333333333333333,33333333333,Y,Y,dd,dd D
DTL,77777777,7777777777777777,77777777777,N,N,ee,ee N
私はdiffコマンドを使用しましたが、私は望ましくないUPDATEDレコードも繰り返します。
DTL,11111111,1111111111111111,11111111111,Y,N,xx,xx
DTL,22222222,2222222222222222,22222222222,Y,Y,cc,cc
DTL,33333333,3333333333333333,33333333333,Y,Y,dd,dd
---
DTL,11111111,1111111111111111,11111111111,Y,Y,xx,xx
DTL,22222222,2222222222222222,22222222222,Y,N,cc,cc
5a5
DTL,77777777,7777777777777777,77777777777,N,N,ee,ee
私はこれで問題がある
awk 'NR==FNR{A[$1];next}!($1 in A)' FS=: old.csv new.csv
だけでなく、私のレコードをフィルタするためにAWK単一行のコマンドを使用し、私にだけOLDファイルに属するレコードを取得doesntのです。
DTL,33333333,3333333333333333,33333333333,Y,Y,dd,dd
ある は、私はこれをahieveするだけでなく駆動bashスクリプトを開始したが、良い例と多くの助けを見つけるdidntの。
myscript.awk
BEGIN {
FS = "," # input field seperator
OFS = "," # output field seperator
}
NR > 1 {
#flag
# N - new record D- Deleted U - Updated
id = $1
name = $2
flag = 'N'
# This prints the columns in the new order. The commas tell Awk to use the character set in OFS
print id,name,flag
}
>> awk -f myscript.awk old.csv new.csv > formatted.csv
:http://stackoverflow.com/a/15385080/5427256 – unknown