輸入分隔符,英文原文為field separator,此處簡稱為FS,預設是空白字元(即空格),awk預設以空白字元為分隔符對每一行進行分割。 輸出分割符,英文原文為output field separator,此處簡稱為OFS,awk將每行分割後,輸出在屏幕上的時候,awk預設的輸出分割符也是空格 ...
輸入分隔符,英文原文為field separator,此處簡稱為FS,預設是空白字元(即空格),awk預設以空白字元為分隔符對每一行進行分割。
輸出分割符,英文原文為output field separator,此處簡稱為OFS,awk將每行分割後,輸出在屏幕上的時候,awk預設的輸出分割符也是空格。
1,用F選項,指定輸入分隔符
ghostwu@dev:~/linux/awk$ cat ghostwu.txt ghostwu-20-man zhangsan-22-woman lisi-23-woman ghostwu@dev:~/linux/awk$ awk '{print $1, $2, $3}' ghostwu.txt ghostwu-20-man zhangsan-22-woman lisi-23-woman
如果不指定分隔符,預設用空格,是不能切割ghostwu-20-man 這一行的 每一列的
ghostwu@dev:~/linux/awk$ awk -F- '{print $1, $2, $3}' ghostwu.txt ghostwu 20 man zhangsan 22 woman lisi 23 woman
F指定'-'為分隔符,同理,先利用sed把ghostwu.txt分割符變成#,然後再用awk的F選項指定分隔符#來進行切割
ghostwu@dev:~/linux/awk$ sed -i 's/\-/#/g' ghostwu.txt ghostwu@dev:~/linux/awk$ cat ghostwu.txt ghostwu#20#man zhangsan#22#woman lisi#23#woman
ghostwu@dev:~/linux/awk$ awk -F# '{print $1, $2, $3}' ghostwu.txt ghostwu 20 man zhangsan 22 woman lisi 23 woman
也可以使用內置變數FS 配合-v選項指定輸入分隔符
ghostwu@dev:~/linux/awk$ awk -v FS='#' '{print $1, $2, $3}' ghostwu.txt ghostwu 20 man zhangsan 22 woman lisi 23 woman
而-F,就是options的一種,用於指定輸入分隔符。
-v也是options的一種,用於設置變數的值。
2,使用OFS指定輸出分隔符,OFS是內置變數,配合v選項一起使用
ghostwu@dev:~/linux/awk$ cat ghostwu.txt ghostwu#20#man zhangsan#22#woman lisi#23#woman ghostwu@dev:~/linux/awk$ awk -v FS='#' '{print $1, $2, $3}' ghostwu.txt ghostwu 20 man zhangsan 22 woman lisi 23 woman ghostwu@dev:~/linux/awk$ awk -v FS='#' -v OFS='--->' '{print $1, $2, $3}' ghostwu.txt ghostwu--->20--->man zhangsan--->22--->woman lisi--->23--->woman
註意的在輸出列的時候,列與列之間要用逗號,如果不用逗號,就變成連接在一起輸出
ghostwu@dev:~/linux/awk$ awk -v FS='#' -v OFS='--->' '{print $1 $2 $3}' ghostwu.txt ghostwu20man zhangsan22woman lisi23woman ghostwu@dev:~/linux/awk$