iT邦幫忙

0

awk 求助!!linux awk 排版!!

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
.
.

1 個回答

2
wiseguy
iT邦超人 1 級 ‧ 2014-11-23 10:06:41

有一定要用 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
wiseguy iT邦超人 1 級 ‧ 2014-11-23 10:44:02 檢舉

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

我要發表回答

立即登入回答