txtファイルから上記のレコードと一致する主キーを削除しました。

txtファイルから上記のレコードと一致する主キーを削除しました。

txt処理中に一致するレコードの一部を削除しようとしています。

list.txt
tag1,slate1,flag1,status0,8,1
tag2,slate2,flag2,status0,2,3
tag1,slate1,flag1,status1,8,1
tag2,slate2,flag2,status1,2,3
tag1,slate1,flag1,status0,0,1
tag2,slate2,flag2,status1,2,3
tag1,slate1,flag1,status1,1,2
tag2,slate2,flag2,status1,1,2
tag1,slate1,flag1,status1,3,4

パスワード:

awk -v add='tag1,slate1,flag1,status1,5,6' '
BEGIN{ FS=OFS=","; split(add, arr, ",") }
($1==arr[1] && $2==arr[2] && $3==arr[3] && $4=="status0") { append=$5 FS $6 }
END{ print add, (append?append:"NULL,NULL") }' list.txt

これにより、次のような出力が得られます。 tag1,slate1,flag1,status1,5,6,0,1

出力を取得したら、このレコード「tag1、slate1、flag1、status0、0、1」の前にある「tag1、slate1、flag1」と一致するレコードを削除する必要があります。 [このレコードからのみ"0,1"値を取得しました。出力する]

次に、list.txtの末尾に出力レコードを追加する必要があります。

list.txt
tag2,slate2,flag2,status0,2,3
tag2,slate2,flag2,status1,2,3
tag1,slate1,flag1,status0,0,1 -> deleted records above this and matching [tag1,slate1,flag1], 
tag2,slate2,flag2,status1,2,3
tag1,slate1,flag1,status1,1,2
tag2,slate2,flag2,status1,1,2
tag1,slate1,flag1,status1,3,4
tag1,slate1,flag1,status1,5,6,0,1

どんな提案がありますか?

ベストアンサー1

2段階のアプローチを使用して、最初にターゲット値と一致する行を識別してから、対応するすべての行を印刷できます。

awk -v add='tag1,slate1,flag1,status1,5,6' '
    BEGIN {
        FS=OFS=","
        split(add,arr)
    }
    NR==FNR {
        if ( ($1==arr[1]) && ($2==arr[2]) && ($3==arr[3]) && ($4=="status0") ) {
            append = $5 OFS $6
            matchFnr = FNR
        }
        next
    }
    !( (FNR < matchFnr) && ($1==arr[1]) && ($2==arr[2]) && ($3==arr[3]) )
    END {
        print add OFS (append ? append : "NULL,NULL")
    }
' list.txt list.txt
tag2,slate2,flag2,status0,2,3
tag2,slate2,flag2,status1,2,3
tag1,slate1,flag1,status0,0,1
tag2,slate2,flag2,status1,2,3
tag1,slate1,flag1,status1,1,2
tag2,slate2,flag2,status1,1,2
tag1,slate1,flag1,status1,3,4
tag1,slate1,flag1,status1,5,6,0,1

おすすめ記事