主キーを使用して同じタイプの最後のレコード値を取得する

主キーを使用して同じタイプの最後のレコード値を取得する

こんにちは。主キーを使用して同じタイプの最後のレコード値を取得しようとしています。

リスト.csv

tag1,slate1,flag1,check1,1,2
tag2,slate2,flag2,check2,1,2
tag3,slate3,flag3,check3,1,2
tag1,slate1,flag1,check1,3,4
tag3,slate3,flag3,check3,1,2

ここで主キーは col1+col2+col3+col4 です。

このレコードに新しいレコードを挿入する必要があります。 tag1,slate1,flag1,check1,5,6同じタイプの最後のレコードをインポートする必要があります。 [レコードが多い場合は、最後の同じ主キーレコードを取得する必要があります。] [tag1,slate1,flag1,check1,3,4 ] そして 3 ,4 の値を取得し、次のレコードのように作成します。

tag1,slate1,flag1,check1,5,6,3,4

努力していますが、期待した結果は得られませんでした。

awk -F, '!dup[$1,$2,$3,$4]++' list.csv - removing duplicates , but able to fetch expected record


awk -F, '!dup["tag1","slate1","flag1","check1"]++' list.csv

「tag1,slate1,flag1,check1,5,6」の値を入力し、以下のような出力を期待します。

tag1,slate1,flag1,check1,5,6,3,4

"tag4,slate4,flag4,check4,8,9" レコードが存在しない場合、出力は次のようになります。

tag4,slate4,flag4,check4,8,9,NILL,NILL

ベストアンサー1

awk -v add='tag1,slate1,flag1,check1,5,6' '
BEGIN{ FS=OFS=","; split(add, arr, ",") }

($1==arr[1] && $2==arr[2] && $3==arr[3] && $4==arr[4]) { append=$5 FS $6 }
END{ print add, (append?append:"NULL,NULL") }' infile

出力:

tag1,slate1,flag1,check1,5,6,3,4

または別の方法で実行してください。

awk -v add='tag4,slate4,flag4,check4,8,9' '
BEGIN{ FS=OFS="," }

{ key=$1 FS $2 FS $3 FS $4; if(index(add, key)==1) append=$5 FS $6 }
END{ print add, (append?append:"NULL,NULL") }' infile

出力:

tag4,slate4,flag4,check4,8,9,NULL,NULL

おすすめ記事