echo $PATH | awk ‘BEGIN{FS=":";OFS=" | "}{$1=$1;print $0}’
echo $PATH | awk ‘BEGIN{RS=":";ORS="^"}{print $0}’
定義:
OFS :输出数据的字段分隔符
ORS :输出字段的⾏分隔符
(一)OFS
問題:
第一條命令的$1= $1有什麼用呢?若不加,則以下兩行命令輸出結果是一樣的,即OFS並沒有起作用
echo $PATH | awk ‘BEGIN{FS=":";OFS=" | "}{print $0}’
echo $PATH | awk ‘BEGIN{FS=":"}{print $0}’
結果如下:
Administrator@X8O0ILYDG7L3A0P MINGW64 /
$ echo $PATH | awk 'BEGIN{RS=":";OFS="|"}{print $0}'
/c/Users/Administrator/bin
/mingw64/bin
/usr/local/bin
/usr/bin
/bin
/mingw64/bin
/usr/bin
/c/Users/Administrator/bin
/c/Program Files (x86)/NetSarang/Xshell 6
/c/Program Files (x86)/Common Files/Oracle/Java/javapath
/c/ProgramData/Oracle/Java/javapath
/c/windows/system32
/c/windows
/c/windows/System32/Wbem
/c/windows/System32/WindowsPowerShell/v1.0
/c/strawberry/c/bin
/c/Users/Administrator/AppData/Local/Google/Chrome/Application
思考:
既然沒起作用那麼$1實際上就是輸出第一個字段,那麼我改寫一下$1 = “aa”如下
echo $PATH | awk ‘BEGIN{FS=":";OFS=" | "}{$1=“aa”;print $0}’
輸出:
Administrator@X8O0ILYDG7L3A0P MINGW64 /
$ echo $PATH | awk 'BEGIN{RS=":";OFS="|"}{$1="aa";print $0}'
aa
aa
aa
aa
aa
aa
aa
aa
aa|Files|(x86)/NetSarang/Xshell|6
aa|Files|(x86)/Common|Files/Oracle/Java/javapath
aa
從以上結果來看,實際上是對字段重新操作後定義的OFS才有效,那麼要輸出原內容就要加上$1 = $1 或者 NF+=0。結果如下:
Administrator@X8O0ILYDG7L3A0P MINGW64 /
$ echo $PATH | awk 'BEGIN{RS=":";OFS="|"}{$1=$1;print $0}'
/c/Users/Administrator/bin
/mingw64/bin
/usr/local/bin
/usr/bin
/bin
/mingw64/bin
/usr/bin
/c/Users/Administrator/bin
/c/Program|Files|(x86)/NetSarang/Xshell|6
/c/Program|Files|(x86)/Common|Files/Oracle/Java/javapath
/c/ProgramData/Oracle/Java/javapath
/c/windows/system32
/c/windows
/c/windows/System32/Wbem
另有兩個帖子擴展講的很詳細也很有意思,也給貼出來:
http://www.letuknowit.com/post/171.html
https://blog.csdn.net/xuejinliang/article/details/52250599
(二)ORS
問題:
同OFS也要定義$1 = $1讓0重新計算,但是以下數據處理實際上並沒有加上$1=$1也得到預期結果了,那麼這個定義是該什麼時候加上呢??想不通…
Administrator@X8O0ILYDG7L3A0P MINGW64 /
$ echo $PATH | awk 'BEGIN{RS=":";ORS="^"}{print $0}'
/c/Users/Administrator/bin^/mingw64/bin^/usr/local/bin^/usr/bin^/bin^/mingw64/bin^/usr/bin^/c/Users/Administrator/bin^/c/Program Files (x86)/NetSarang/Xshell 6^/c/Program Files (x86)/Common Files/Oracle/Java/javapath^/c/ProgramData/Oracle/Java/javapath^/c/windows/system32^/c/windows^/c/windows/System32/Wbem^/c/windows/System32/WindowsPowerShell/v1.0^/c/strawberry/c/bin^/c/Users/Administrator/AppData/Local/Google/Chrome/Application^/c/Python37^/c/Python37/Scripts^/c/Python37/Scripts^/c/Program Files/MySQL/MySQL Server 8.0/bin^/d/nodejs^/d/allure-2.13.5/bin^/c/Users/Administrator/AppData/Local/Google/Chrome/Application^/c/Users/Administrator/AppData/Local/Google/Chrome/Application^/c/Python37/Scripts^/c/Python37^/c/Users/Administrator/AppData/Local/Microsoft/WindowsApps^/c/Program Files/Java/jdk1.8.0_91/bin^/c/Program Files/Java/jdk1.8.0_91/jre/bin^/c/Program Files (x86)/Google/Chrome/Application^/c/Users/Administrator/AppData/Local/Google/Chrome^/c/Users/Administrator/AppData/Roaming/npm^/d/Fiddler^/d/VScode/Microsoft VS Code/bin^/usr/bin/vendor_perl^/usr/bin/core_perl^
Administrator@X8O0ILYDG7L3A0P MINGW64 /
$ echo $PATH | awk 'BEGIN{RS=":";ORS="^"}{$1=$1;print $0}'
/c/Users/Administrator/bin^/mingw64/bin^/usr/local/bin^/usr/bin^/bin^/mingw64/bin^/usr/bin^/c/Users/Administrator/bin^/c/Program Files (x86)/NetSarang/Xshell 6^/c/Program Files (x86)/Common Files/Oracle/Java/javapath^/c/ProgramData/Oracle/Java/javapath^/c/windows/system32^/c/windows^/c/windows/System32/Wbem^/c/windows/System32/WindowsPowerShell/v1.0^/c/strawberry/c/bin^/c/Users/Administrator/AppData/Local/Google/Chrome/Application^/c/Python37^/c/Python37/Scripts^/c/Python37/Scripts^/c/Program Files/MySQL/MySQL Server 8.0/bin^/d/nodejs^/d/allure-2.13.5/bin^/c/Users/Administrator/AppData/Local/Google/Chrome/Application^/c/Users/Administrator/AppData/Local/Google/Chrome/Application^/c/Python37/Scripts^/c/Python37^/c/Users/Administrator/AppData/Local/Microsoft/WindowsApps^/c/Program Files/Java/jdk1.8.0_91/bin^/c/Program Files/Java/jdk1.8.0_91/jre/bin^/c/Program Files (x86)/Google/Chrome/Application^/c/Users/Administrator/AppData/Local/Google/Chrome^/c/Users/Administrator/AppData/Roaming/npm^/d/Fiddler^/d/VScode/Microsoft VS Code/bin^/usr/bin/vendor_perl^/usr/bin/core_perl^