学习awk时,一定要记得动手去实践,只有在实践中才能发现问题,以下就我在学习中和实践中的经验,总结一下RS,ORS,FS,OFS的区别和联系。

一,RS与ORS

1,RS是记录分隔符,默认的分隔符是\n,具体用法看下

[root@krlcgcms01 mytest]# cat test1     //测试文件

111 222

333 444

555 666

2,RS默认分割符\n

[root@krlcgcms01 mytest]# awk '{print $0}' test1  //awk 'BEGIN{RS="\n"}{print $0}' test1 这二个是一样的

111 222

333 444

555 666

其实你可以把上面test1文件里的内容理解为,111 222\n333 444\n555 6666,利用\n进行分割。看下一个例子

3,自定义RS分割符

[zhangy@localhost test]$ echo "111 222|333 444|555 666"|awk 'BEGIN{RS="|"}{print $0,RT}'

111 222 |

333 444 |

555 666

结合上面一个例子,就很容易理解RS的用法了。

4,RS也可能是正则表达式

[zhangy@localhost test]$ echo "111 222a333 444b555 666"|awk 'BEGIN{RS="[a-z]+"}{print $1,RS,RT}'

111 [a-z]+ a

333 [a-z]+ b

555 [a-z]+

从例3和例4,我们可以发现一点,当RT是利用RS匹配出来的内容。如果RS是某个固定的值时,RT就是RS的内容。

5,RS为空时

[zhangy@localhost test]$ cat -n test2

1  111 222

2

3  333 444

4  333 444

5

6

7  555 666

[zhangy@localhost test]$ awk 'BEGIN{RS=""}{print $0}' test2

111 222

333 444

333 444

555 666

[zhangy@localhost test]$ awk 'BEGIN{RS="";}{print ""}' test2  //这个例子看着比较明显

< 111 222 >

< 333 444     //这一行和下面一行,是一行

333 444 >

< 555 666 >

从这个例子,可以看出当RS为空时,awk会自动以多行来做为分割符。

6,ORS记录输出分符符,默认值是\n

把ORS理解成RS反过程,这样更容易记忆和理解,看下面的例子。

[zhangy@localhost test]$ awk 'BEGIN{ORS="\n"}{print $0}' test1  //awk '{print $0}' test1二者是一样的

111 222

333 444

555 666

[zhangy@localhost test]$ awk 'BEGIN{ORS="|"}{print $0}' test1

111 222|333 444|555 666|

二,FS与OFS

1,FS指定列分割符

[zhangy@localhost test]$ echo "111|222|333"|awk '{print $1}'

111|222|333

[zhangy@localhost test]$ echo "111|222|333"|awk 'BEGIN{FS="|"}{print $1}'

111

2,FS也可以用正则

[zhangy@localhost test]$ echo "111||222|333"|awk 'BEGIN{FS="[|]+"}{print $1}'

111

3,FS为空的时候

[zhangy@localhost test]$ echo "111|222|333"|awk 'BEGIN{FS=""}{NF++;print $0}'

1 1 1 | 2 2 2 | 3 3 3

当FS为空的时候,awk会把一行中的每个字符,当成一列来处理。

4,RS被设定成非\n时,\n会成FS分割符中的一个

[zhangy@localhost test]$ cat test1

111 222

333 444

555 666

[zhangy@localhost test]$ awk 'BEGIN{RS="444";}{print $2,$3}' test1

222 333

666

222和333之间是有一个\n的,当RS设定成444后,222和333被认定成同一行的二列了,其实按常规思想是二行的一列才对。

5,OFS列输出分隔符

[zhangy@localhost test]$ awk 'BEGIN{OFS="|";}{print $1,$2}' test1

111|222

333|444

555|666

[zhangy@localhost test]$ awk 'BEGIN{OFS="|";}{print $1 OFS $2}' test1

111|222

333|444

555|666

test1只有二列,如果100列,都写出来太麻烦了吧。

[zhangy@localhost test]$ awk 'BEGIN{OFS="|";}{print $0}' test1

111 222

333 444

555 666

[zhangy@localhost test]$ awk 'BEGIN{OFS="|";}{NF=NF;print $0}' test1

111|222

333|444

555|666

为什么第二种方法中的OFS生效呢?个人觉得,awk觉查到列有所变化时,就会让OFS生效,没变化直接输出了。

linux awk 区别,awk中RS、ORS、FS、OFS的区别和联系小结相关推荐

  1. linux awk 区别,linux awk 中 RS,ORS,FS,OFS 区别与联系

    今天在学习时偶尔搜索到了这篇文章,觉得不错,转摘一下:http://blog.51yip.com/shell/1151.html 总结 RS,ORS,FS,OFS的区别和联系. 一,RS与ORS 1, ...

  2. linux awk 中 RS,ORS,FS,OFS 区别与联系

    今天在学习时偶尔搜索到了这篇文章,觉得不错,转摘一下:http://blog.51yip.com/shell/1151.html 总结 RS,ORS,FS,OFS的区别和联系. 一,RS与ORS 1, ...

  3. awk中RS,ORS,FS,OFS区别与联系

    学习awk时,一定要记得动手去实践,只有在实践中才能发现问题,以下就我在学习中和实践中的经验,总结一下RS,ORS,FS,OFS的区别和联系. 一,RS与ORS 1,RS是记录分隔符,默认的分隔符是\ ...

  4. awk内置命令RS,ORS,FS,OFS的使用

    Awk内置命令RS, ORS, FS, OFS FS 指定字段列分隔符 OFS 指定输出字段列分隔符 RS指定行分隔符 默认分隔符为\n ORS指定输出行分隔符 FS指定列分隔符,相当于参数-F.OF ...

  5. Linux中awk后面的RS, ORS, FS, OFS 用法

    Linux中awk后面的RS, ORS, FS, OFS 含义 一.RS 与 ORS 差在哪 我们经常会说,awk是基于行列操作文本的,但如何定义"行"呢?这就是RS的作用.   ...

  6. Linux中awk后面的RS, ORS, FS, OFS 含义

    awk之RS.ORS与FS.OFS RS:Record Separator,记录分隔符 ORS:Output Record Separate,输出当前记录分隔符 FS:Field Separator, ...

  7. linux rs,Linux中的RS, ORS, FS, OFS

    一.RS 与 ORS 差在哪 我们经常会说,awk是基于行列操作文本的,但如何定义"行"呢?这就是RS的作用.  默认情况下,RS的值是\n.下面通过实例来理解下RS. echo ...

  8. java post和put的区别,ES 中的 POST 和 PUT 的区别

    0.什么是Restful架构 比较难说清楚,这部分大雾状态,引ruanyf 理解RESTful架构 的几句总结吧: Fielding将他对互联网软件的架构原则,定名为REST,即Representat ...

  9. python post与get的区别_python中get和post有什么区别

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.sfkyty.com ...

  10. python __import__和import区别_Python中import 与__import__() 之间的区别比较

    本篇文章给大家带来的内容是关于Python中import 与__import__() 之间的区别比较,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 首先来说一下两者的区别: impo ...

最新文章

  1. 16 条 yyds 的代码规范
  2. DevExperience(1712)
  3. 算法,天使还是魔鬼?
  4. 学习Node.js并开始在浏览器之外执行JavaScript
  5. python页面切换_Python+Selenium学习--窗口切换及操作元素
  6. 企业微信开放客户朋友圈功能 无需审核即可使用
  7. ASP.NET AJAX入门系列(5):使用UpdatePanel控件(二)
  8. 微软修复严重的Azure漏洞,可用于泄露客户数据
  9. 你最喜欢哪款游戏的界面风格,为什么?
  10. 交互式电子杂志_电子杂志形式与交互问题分析
  11. ST电机库api使用——获取电机状态
  12. Scratch 3.x编程技巧:条件语句与随机数
  13. Shufflenet解读
  14. 【GreenDao学习笔记】SQLite数据库保存float/double小数类型精度丢失
  15. Nginx复习总结学习总结
  16. 如何录屏?电脑屏幕录制软件哪个好?
  17. kettle运行spoon.sh启动图形化界面报错处理
  18. 电子计算机进行会计核算 其会计,1. 使用电子计算机进行会计核算,其软件与其生成会计 ….doc...
  19. eve显示无法连接服务器,eve 链接不到服务器
  20. HCNP——OSPF路由器的角色

热门文章

  1. linux自动挂载ntfs分区,Ubuntu 12.04 开机自动挂载ntfs分区
  2. 【Level 08】U08 Positive Attitude L5 Satisfy your need to know
  3. Excel数据导入数据库(Java)
  4. python安装在d盘环境变量配置_python安装与环境变量配置
  5. android bitmap to base64_Android基础(11)—你需要知道的内存知识
  6. python3怎么用_当同时安装Python2和Python3后,如何兼容并切换使用详解(比如pip使用)...
  7. Java图片压缩 BufferedImage Linux 下代码阻塞不工作
  8. redis3.0伪集群安装步骤
  9. spring-boot ffmpeg 搭建一个音频转码服务
  10. Android-简单的图片验证码