@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
sedに予約されたスペースという変数が1つしかないことを除いて、Peterのawkコマンドと同じことを行います。