AWK 列出 第一個分隔後 的所有資料

Linux 經常使用 AWK 來依照某個條件來垂直分割字串, ex:

  • echo "a b c d" | awk '{print $2}' # 印出 b
  • echo "a b c d" | awk -F' ' '{print $2}' # 印出 b, -F: 依照一個空白分隔切割字串

但是, 上述範例 'a b c d' 想要依照空白分隔, 但是要列出 'b c d', 要怎麼做呢?

AWK 列出 第一個分隔後 的所有資料

想要列出第一個分隔後的資料, 似乎沒有簡單快速的方法, 都得要跑 for 來達成, 於是就照下述作法:

  • echo "a b c d" | awk '{for (i=2; i <= NF; i++) {printf $i" "} printf "\n"}' # 印出 b c d
  • echo "a b c d" | awk -F' ' '{for (i=2; i <= NF; i++) {printf $i" "} printf "\n"}' # 印出 b c d
  • awk -F" " '{for (i=2; i <= NF; i++) {printf $i" "} printf "\n"}' test.txt # test.txt 內容就是垂直文字內容
  • 註: NF 是此次分割的總分割數量, 是 awk 內定的變數, 直接使用即可.

感謝長輩們的指點:

  • GSLin: echo "a b c d" | sed -e 's/^[^ ]* *//'
  • 榮尼王: echo "a b c d" | awk '{ print substr($0, index($0, " ") + 1); }'
  • carrl yea: echo "a b c d" | awk '{ $1=""; print $0 }'

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

在〈AWK 列出 第一個分隔後 的所有資料〉中有 4 則留言

  1. 用 substr 和 index 組合就行了

    > cat /etc/passwd | head -n 3
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/bin/sh
    bin:x:2:2:bin:/bin:/bin/sh
    > cat /etc/passwd | head -n 3 | awk '{ print substr($0, index($0, ":") + 1); }'
    x:0:0:root:/root:/bin/bash
    x:1:1:daemon:/usr/sbin:/bin/sh
    x:2:2:bin:/bin:/bin/sh

gslin 發表迴響取消回覆

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料