<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                [TOC] # 多行記錄的數據處理 > 我們實際處理的數據并不會都是一行就是一條記錄,有的時候我們會遇到多行數據作為一條記錄的情況,那么這種情況要如何使用Awk程序來處理呢? 本節就來介紹多行的記錄處理方法。 ## 示例: 處理格式固定、空白行作為記錄分隔符數據 > 我們之前了解了`RS`變量作用是設置記錄分隔符的,當`RS`設置為""空時,`FS`變量默認可以為連續的空白符、Tab制表符或者換行符,當我們設置`FS`為'\n'換行符時,每一行數據就被識別為一個字段了,直到遇到空行結束一條記錄。 以下面的數據為例: ``` $ cat person.txt 張三 30 165 中國北京市朝陽區 李四 25 170 中國河北省鄭州市 ``` 上面的數據是四行數據為一個人的信息,第一行為姓名,第二行為年齡,第三行為身高,第四行為所在地區,每條信息記錄都是通過空行分隔開。 接下來我們來用Awk程序解析并格式化輸出信息: ``` #!/usr/bin/awk -f BEGIN{ FS="\n" RS="" }{ printf("姓名:%-10s ,年齡: %5d ,身高: %5d ,地址: %s\n", $1, $2, $3, $4) } ``` **執行命令:** ``` $ ./multiline.awk b.txt ``` **輸出結果:** ``` 姓名:張三 ,年齡: 30 ,身高: 165 ,地址: 中國北京市朝陽區 姓名:李四 ,年齡: 25 ,身高: 170 ,地址: 中國河北省鄭州市 ``` 這個示例可以做到將多行記錄格式化輸出為一行記錄,加入我們已經有一個可以處理單行記錄的Awk程序了,那么我們要做的可能有兩種: 1. 修改已經有的Awk程序的`RS`和`FS`變量后再處理數據。 2. 再編寫一個類似上面的示例,將多行記錄格式化輸出為單行記錄。 兩種辦法各有優點,你可以根據自己傾向來選擇。 ## 示例:處理格式不固定、空白符作為記錄分隔符數據 > 對于格式順序固定的多行記錄處理方法我們已經掌握了,那么對于格式順序不固定的又需要如何處理呢?比如四列數據年齡位置可能在身高后,也可能在地址后,這時候就需要在行開始位置為每行數據含義增加一些關鍵詞標識了。 我們來看下這個示例: ``` $ cat person.txt 姓名 張三 年齡 30 身高 165 地址 中國北京市朝陽區 身高 170 地址 中國河北省鄭州市 姓名 李四 年齡 25 ``` 我們的Awk可以這樣實現: ``` /^姓名/{ name = $2 } /^年齡/{ age = $2 } /^身高/{ height = $2} /^地址/{ addr = $2 } /^$/{ printf("%s %s %s %s\n", name, age, height, addr)} ``` 執行命令: ``` ./multline2.awk persion.txt ``` 輸出結果: ``` 張三 30 165 中國北京市朝陽區 李四 25 170 中國河北省鄭州市 ``` 我們也可以通過設置`RS`和`FS`的方法做一個通用的示例: ``` $ cat multiline4.awk #!/usr/bin/awk -f function prinfo(i){ for(i = 1; i <= NF; i++) f($i) for( i in res) printf("%s ", res[i] ) print "" } function f(n){ split(n, arr, " ") return res[arr[1]] = arr[2] } BEGIN{ FS="\n"; RS = ""; } { prinfo() } ``` 思考問題: 1. 上面的示例由于使用了`for( i in res)` ,輸出結果順序就不一定是我們需要的順序,怎么能固定輸出順序又不將數組下表不寫為固定值呢?
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看