重构csv文件

Plo*_*ouf 1 text-processing csv

这是我要修改的数据示例:

John,,
bim,bam,boom
tim,tam,toom
lam,loom,lim
Mary,,
pam,pim,poom
dam,dim,doom*
Run Code Online (Sandbox Code Playgroud)

我试图实现这一目标:

John,bim,bam,boom
John,tim,tam,toom
John,lam,loom,lim
Mary,pam,pim,poom
Mary,dam,dim,doom
Run Code Online (Sandbox Code Playgroud)

当一个名字单独出现在一行上时,它会成为下面所有行中的一个新列,直到出现下一个具有相同模式的名字。

我想知道 awk 或其他工具是否可以提供帮助,但我有点迷茫。

我尝试创建一个条件(如果第 2 列和第 3 列为空,则执行某些操作)但现在对我来说这看起来有点复杂。

ste*_*ver 5

您正在考虑正确的路线:

我尝试创建一个条件(如果第 2 列和第 3 列为空,则执行某些操作)

具体来说,

  • 如果第 2 列和第 3 列为空,则保存第 1 列的值并继续
  • 否则,将保存的值添加到该行并打印它(有几种awk方法可以做到这一点)

所以例如

awk -F, '$2=="" && $3=="" {pfx=$1; next} {print pfx "," $0}' file.csv
Run Code Online (Sandbox Code Playgroud)

或更惯用地使用FS字段分隔符变量

awk -F, '$2=="" && $3=="" {pfx=$1; next} {$0 = pfx FS $0; print}' file.csv
Run Code Online (Sandbox Code Playgroud)

或(因为默认操作 - 当规则评估为 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
Run Code Online (Sandbox Code Playgroud)