使用副标题中的信息添加新列

使用副标题中的信息添加新列

用 sed 替换包含模式的行

感谢@don_crissti 和@Archemar。我认为我的问题不是上述问题的重复。

这是一个输入示例。编辑:所有部分都有值。我在副标题中添加了另一个复杂性(我应该这样做)。

DATA1

NAME: A (X)
12,1
13,2
14,4

NAME: B (X)
21,2
22,3

NAME: C (X)
24,4

所需的输出应该类似于

DATA1

A    12,1
A    13,2
A    14,4

B    21,2
B    22,3

C    24,4

答案1

看来你的输出分隔符是 4 个空格,所以这就是这个例子使用的 - 将其更改为你需要的,例如 TAB,OFS="\t"

awk 'NR==1 || NF==0 {print; next}  # main heading and blank lines 
     $1=="NAME:" {name=$2; next}   # section name/header
     {print name, $1}              # data lines
    ' OFS="    " file

输出:

DATA1

A    12,1
A    13,2
A    14,4

B    21,2
B    22,3

C    24,4

答案2

这是 sed。我不推荐它

sed -n '
    1 {p; n}
    /^[[:blank:]]*$/ {p; n}
    /^NAME: \+/ {s///; h; n}
    {H; g; s/\n/ /; p; s/ .*//; h}
' file

它的作用与 Peter 的 awk 命令的作用相同,只是 sed 只有一个变量:保留空间。

相关内容