下の行の値を使用して、不足しているフィールドを入力します。

下の行の値を使用して、不足しているフィールドを入力します。

「完全な」データセットを持つ数行しかないセミコロンで区切られたデータファイルがあります。彼ら最後にデータセットが適用される行ブロックの位置。シェルスクリプト(または同様のコマンドラインツール)を使用して、完全に入力されたこの行のデータを上記の行に追加したいと思います。

たとえば、私のファイルに次のデータが含まれているとします。

86540701
86951202
86262402
86509002
86770802
86459902
86301002
86485102
86556002;Vivo Y11;1630000;NULL;;;
86447404
86161405
86388604
86106105
86426405;Xiaomi Redmi 8A Pro (Redmi 8A Dual);1465000;4;;;

次のように完全な行を見つけ、そのデータを上記の不完全な行に置き換えることができるようにします。

86540701;Vivo Y11;1630000;NULL;;;
86951202;Vivo Y11;1630000;NULL;;;
86262402;Vivo Y11;1630000;NULL;;;
86509002;Vivo Y11;1630000;NULL;;;
86770802;Vivo Y11;1630000;NULL;;;
86459902;Vivo Y11;1630000;NULL;;;
86301002;Vivo Y11;1630000;NULL;;;
86485102;Vivo Y11;1630000;NULL;;;
86556002;Vivo Y11;1630000;NULL;;;
86447404;Xiaomi Redmi 8A Pro (Redmi 8A Dual);1465000;4;;;
86161405;Xiaomi Redmi 8A Pro (Redmi 8A Dual);1465000;4;;;
86388604;Xiaomi Redmi 8A Pro (Redmi 8A Dual);1465000;4;;;
86106105;Xiaomi Redmi 8A Pro (Redmi 8A Dual);1465000;4;;;
86426405;Xiaomi Redmi 8A Pro (Redmi 8A Dual);1465000;4;;;

ベストアンサー1

これは私たちが使用できる仕事です。tacファイルを逆順に解析します。

tac file | awk -F';' 'NF > 1 {p = substr($0,index($0,FS))} {print $1 p}' | tac

そのため、行を保存せずに読み取った後に各行を印刷します。

後で使用するために、行の先頭から最後までNF > 1部分文字列を保存するとき。FS

おすすめ記事