AWK:如果这个是正则表达式,有没有办法将OFS设置为FS?
在awk中,字段(或记录)分隔符FS(或RS)可以设置为正则表达式.
echo "a|b-c|d" | awk 'BEGIN{FS="[|-]"} {$3="z"}1' a b z d 在这种情况下,输出字段分隔符OFS默认设置为空格. 不幸的是,这种语句OFS = FS =“[| – ]”不起作用,因为它将OFS设置为一个字符串. 我知道如果有多个选择,awk选择输出字段分隔符可能会变得棘手,但是如果没有新字段,则可以保留当前的字段. 那么,是否有一种简单的方法可以将OFS设置为与FS完全相同的正则表达式,这样我就可以得到它? echo "a|b-c|d" | awk '... {$3="z"}1' a|b-z|d 或者,有没有办法捕获数组中的所有分隔符? 同样的问题也适用于记录分隔符RS(及其相关的ORS) 解决方法正如您已经提到的,没有办法根据每种情况下使用的FS动态设置OFS.如果正则表达式是RS而不是FS,你可以使用RT(事实上,我只是看到anubhava的答案就是这样,很好!).但是,如果你有GNU awk还有另一种方法:如column replacement with awk,with retaining the format (Ed Morton’s answer)所示,你可以使用 gawk 'BEGIN{FS="[|-]"} # set FS {split($0,a,FS,seps) # split based on FS and ... # ... store pieces in the array seps() a[3]="z" # change the 3rd field for (i=1;i<=NF;i++) # print the data back printf "%s%s",a[i],seps[i] # keeping the separators print "" # print a new line }' 作为单线: $gawk 'BEGIN{FS="[|-]"} {split($0,seps); a[3]="z"; for (i=1;i<=NF;i++) printf "%s%s",seps[i]; print ""}' <<< "a|b-c|d" a|b-z|d
(编辑:达州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Install Tomcat 6 on CentOS or RHEL --转载
- iphone5s升级移动4g流程 iphone5s 4g破解实测
- 华为Mate7高配版和标准版的区别 华为Mate7高配版标准版对比
- 红米手机不用抢购 红米手机和红米Note开放购买
- 安卓游戏鸭嘴兽泰瑞在哪里攻略(对手15-20三星通关视频)
- iphone怎么备份通讯录短信及照片
- 使用cygwin中的awk工具进行mysql binlog日志查看[利刃篇]
- 魅族flyme密码忘了怎么办 魅族flyme密码找回方法
- activation lock怎么设置使用 activation lock在哪里
- mount 需要同时设置 noatime 和 nodiratime 吗?