New (名次){
班級 (3年2班)
姓名 () {
X (周)
Y (小杰)
LINKS (56) { 32 52 53 54 55 56 57 58 64 89 90 91 92 93 94 95 86 87 101 103 109 114 115 119 123 125 131 145 146 149 150 153 161 175 185 191 193 195 201 204 211 213 219 221 223 227 }
轉成:
姓名 周 小杰
32
52
53
54
103
109 因為斷行,不能判斷成11
114
123
.
.
204
.
.
有一定要用 awk 嗎?用 sed 比較簡單。
把你的資料存成 data.txt,然後執行下列指令:
<pre class="c" name="code">sed -n '/^X (\([^)]*\))$/{N; s/^X (\([^)]*\)).*Y (\([^)]*\))$/姓名 \1 \2/;p};/^LINKS/{s/^.*{ //;s/ }$//;s/ /\n/g;p}' data.txt
awk 版本:
<pre class="c" name="code">awk '
BEGIN {
FS = "\n"
RS = ""
}
{
split($3, name, " ")
split($4, fn1, "(")
split(fn1[2], fn2, ")")
split($5, ln1, "(")
split(ln1[2], ln2, ")")
printf ("%s %s %s\n", name[1], fn2[1], ln2[1])
split($6, nn, " ")
for( i=4; i < length(nn); i++)
printf ("%d\n",nn[i])
}
' data.txt