変更するデータの例は次のとおりです。
John,,
bim,bam,boom
tim,tam,toom
lam,loom,lim
Mary,,
pam,pim,poom
dam,dim,doom*
私はこれを達成しようとしています。
John,bim,bam,boom
John,tim,tam,toom
John,lam,loom,lim
Mary,pam,pim,poom
Mary,dam,dim,doom
名前が行に単独で表示されると、次の名前が同じパターンで表示されるまで、その下のすべての行に対して新しい列になります。
awkや他のツールが役に立つかもしれません。しかし、少し恥ずかしいです。
条件を設定してみましたが(2列と3列が空であれば何かを行う)、今は少し複雑に見えます。
ベストアンサー1
あなたの思考は正しいです:
条件を設定してみます(2列と3列が空の場合は何かをしてください)
具体的には、
- 2列と3列が空の場合は、1列の値を保存して続行します。
- それ以外の場合は、保存した値を行に追加して印刷します(
awk
これにはいくつかの方法があります)。
例えば
awk -F, '$2=="" && $3=="" {pfx=$1; next} {print pfx "," $0}' file.csv
または、より慣用的にFS
フィールド区切り変数を使用します。
awk -F, '$2=="" && $3=="" {pfx=$1; next} {$0 = pfx FS $0; print}' file.csv
または(基本操作 - ルールがtrueと評価されるか、1
- レコードを印刷するため)
awk -F, '$2=="" && $3=="" {pfx=$1; next} {$0 = pfx FS $0} 1' file.csv
John,bim,bam,boom
John,tim,tam,toom
John,lam,loom,lim
Mary,pam,pim,poom
Mary,dam,dim,doom