如何将第一行的第一个字段复制到后续行?

Tol*_*era 1 regex sed

试图让这个表达起作用,有人可以看一下并告诉我离我有多远吗?

我正在尝试获取第1行中的信息以传播到其他空白行.

Line 1 = "1234, type"
Line 2..99 = ", type"
Run Code Online (Sandbox Code Playgroud)

结果:第1行.. ="1234,类型"

这是表达方式

sed -i -R -n '{(^[^,]{});x;n;^,;s/^.{}/\1/;x;p;x;p}' SedExit.txt > Str.txt
Run Code Online (Sandbox Code Playgroud)

Mar*_*eed 5

如果您对awk基于解决方案的解决方案感兴趣,并假设我在上述评论中对您的请求的解释是正确的:

awk -F, 'BEGIN { OFS = "," } $1 { last = $1 } !$1 { $1 = last } { print }' SedExit.txt 
Run Code Online (Sandbox Code Playgroud)

编辑:简要说明 -

-F,告诉awk使用逗号作为输入字段分隔符; 它将自动在逗号上分割行,并使各个字段可用为$ 1,$ 2等($ 0是整行)

BEGIN {}运行在括号中的代码一次在AWK运行的开始,任何输入被处理之前.

OFS = ","将输出字段分隔符设置为逗号,以匹配输入.这让我们可以直接修改字段并仍然以逗号分隔输出,而不必在代码中重建整行.

其余代码每行输入运行一次:

$1 { last = $1 } 第一个$1是要执行的下一个代码块必须满足的条件:如果当前行的那个字段为真(非空),则运行该块.该块将该字段的副本保存在名为"last"的新变量中.

因此,如果在第一个逗号之前有任何内容,我们会记住它以供以后使用.

!$1 { $1 = last } 此处的条件被否定,因此只有在第一个字段为空时才会运行此块.在这种情况下,我们复制另一种方式,并将第一个字段设置为值last.希望我们以前看到过与第一个块相匹配的行并设置last为某个行,或者这没用.

{ print } 这里没有条件,因此代码在每一行上运行,它只是打印出来.如果适用,输出将包含我们对1美元的修改.