bash-記錄修改OFS和ORS讓$0重新計算

本文探讨了bash shell中使用awk处理数据时,如何通过设置OFS(输出字段分隔符)和ORS(输出行分隔符)来改变输出格式。举例说明了$1=$1的用途,它用于确保字段按照新设定的OFS重新计算。文章还提到了未设置$1=$1时,OFS可能不生效的问题,并给出了相关链接供进一步阅读。
摘要由CSDN通过智能技术生成

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^
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值