awk之RS、ORS与FS、OFS

RS:Record Separator,记录分隔符

ORS:Output Record Separate,输出当前记录分隔符

FS:Field Separator,字段分隔符

OFS:Out of Field Separator,输出字段分隔符

PS:RS、ORS、FS、OFS的英文解释绝不是这样的,这里只是解释清楚。建议去阅读awk的英文读物,其中解释了缩写的含义。

什么是field(字段),什么是record(记录行)?

示例:

1.txt

  1. i am a student.
  2. i like to swim
  3. hello moto

1代表第一个记录行,2代表第二个记录行,3代表第三个记录行。通过观察我们可以知道总共有3个记录行(record)。

看看第一行:“i am a student”,这一行的每个单词都是一个字段(field)。“i”是一个字段,“am”是一个字段,“a”是一个字段,“student”是一个字段,该行总共有4个字段。

RS与ORS

RS:记录行分隔符

示例:

1.txt

  1. a\n
  2. b\n
  3. c\n
  4. d\n
  5. e\n

该文本总共有5行,每一行都有一个换行符“\n”。所以每行记录都是以“\n”为一个(换行的)标志。

可以用一下方法来理解:

找到某某标志,让每个某某后的内容重新变成一行

示例

1.txt

a|b|c

代码:awk ‘BEGIN{ RS="|"; } { print $0 }‘

a

b

b

ORS:可以看成RS的逆向过程

示例

1.txt

a

b

c

可以这样理解:

观察每一行的“换行符号”,然后将“换行符号”替换成你想要的符号。

awk ‘BEGIN{ ORS="----" }{ print $0 }‘ 1.txt

a----b----c----

FS:字段分隔符

FS默认值为“ (空格)”,如“hello moto”.

在“hello moto”中有一个空格,空格就是hello与moto的分隔符(separator),而hello与moto就为字段(files)。awk以空格来区分。

在看看“i----love----you”,如果我们用命令“awk “{ print $1 }””会看到结果为:

i----love----you

如果想打印出三个字母,通过观察可发现“----”为分隔符。

awk ‘BEGIN{ FS="----";}{ print $1,$2,$3 }‘ filename

i love you

OFS:输出的字段分隔符。

这么解释吧,如上例中“i----love----you”,“----”为分隔符(FS),如果我们想改为用其他符号显示可以这样:

awk ‘BEGIN{ FS="----";OFS="*****" }{ print $1,$2,$3 }‘ filename

i*****love*****you

其实OFS还有一个例子
echo "abc" | awk ‘{ OFS="." } { NF=NF; print NF,$0}‘
结果
1.abc

PS:RS与ORS可以说成是一个互逆的过程()也可以看成一个替换的过程,但是看成互逆的过程比较好理解;FS与OFS就是一个替换的过程。

Have a nice day!!!

时间: 2024-10-05 23:35:43

awk之RS、ORS与FS、OFS的相关文章

linux awk 中 RS,ORS,FS,OFS 区别与联系【转】

linux awk 中 RS,ORS,FS,OFS 区别与联系 http://blog.csdn.net/jesseen/article/details/7992929

awk之RS、ORS、FS、OFS基础及举例

RS:Record Separator,记录分隔符 ORS:Output Record Separate,输出当前记录分隔符 FS:Field Separator,字段分隔符 OFS:Out of Field Separator,输出字段分隔符 PS:RS.ORS.FS.OFS的英文解释绝不是这样的,这里只是解释清楚.建议去阅读awk的英文读物,其中解释了缩写的含义. 什么是field(字段),什么是record(记录行)? 示例: 1.txt内容如下: i am a student. i li

linux:awk之RS、ORS与FS、OFS

awk之RS.ORS与FS.OFS RS:Record Separator,记录分隔符 ORS:Output Record Separate,输出当前记录分隔符 FS:Field Separator,字段分隔符 OFS:Out of Field Separator,输出字段分隔符 PS:RS.ORS.FS.OFS的英文解释绝不是这样的,这里只是解释清楚.建议去阅读awk的英文读物,其中解释了缩写的含义. 什么是field(字段),什么是record(记录行)? 示例: 1.txt i am a

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

Linux中awk后面的RS, ORS, FS, OFS 含义 一.RS 与 ORS 差在哪 我们经常会说,awk是基于行列操作文本的,但如何定义"行"呢?这就是RS的作用.  默认情况下,RS的值是\n.下面通过实例来理解下RS. echo '1a2a3a4a5' | awk '{print $1}' 1a2a3a4a5 echo '1a2a3a4a5' | awk 'BEGIN{RS="a"}{print $1}' 1 2 3 4 5我们可以看到,在更改了RS的

awk知识点

awk中删除重复行(转) 1.去除部分字段重复的行 sort+uniq也可以完成,但是awk真的很强大.两者的差异还在于,awk保持了文件中原本的每行的顺序,而sort必须排序,这样就变成按字母或某种其他规则的排序了. less num.list |awk '$1~/84[0-9]/'|awk '!a[$1]++' 2.去除记录重复的行 awk去除重复行,思路是以每一行的$0为key,创建一个hash数组,后续碰到的行,如果数组里已经有了,就不再print了,否则将其print 在awk中,可以

AWK概述及常用格式

AWK AWK是一种用于处理文本的编程语言工具.它是 Linux中也是任何环境中现有的功能最强大的数据处理引擎之一. 基本语法 awk [options] 'program' file file ... awk [options] 'PATTERN{action}' filefile ... -FCHAR:定义输入分隔符 1.awk的输出 (1) 各项目之间使用逗号分隔,而输出时则使用输出分隔符分隔(输出分隔符默认为空白): (2) 输出的各item可以是字符串或数值.当前记录的字段.变量或aw

awk从入门至放弃

什么是awk?awk:Aho,Weinberger,Kernighan,报告生成器,格式化文本输出有多种版本:New awk(nawk),GNU awk(gawk)gawk:模式扫描的处理语言基本用法:awk [options] 'program' var=value file...awk [POSIX or GNU style options] -f programfile [--] file ... 基本格式:awk [options] 'program' file...program:pa

AWK之随心所欲-高手篇

1.内置变量 变量名 描述 FS 输入字段分隔符,默认是空格或制表符 OFS 输出字段分隔符,默认是空格 RS 输入记录分隔符,默认是换行符\n ORS 输出记录分隔符,默认是换行符\n NF 统计当前记录中字段个数 NR 统计记录编号,每处理一行记录,编号就会+1 FNR 统计记录编号,每处理一行记录,编号也会+1,与 NR 不同的是,处理第二个 文件时,编号会重新计数. ARGC 命令行参数数量 ARGV 命令行参数数组序列数组,下标从 0 开始,ARGV[0]是 awk ARGIND 当前

shell中的特殊变量IFS

当我越来越习惯python的编写风格时,我经常会想用bash去遍历一个文件的行,并将读取的行进行处理. 但一个诡异的情况,如果我的文本类似于这样 the first line. the second line. the third line. for line in `cat filename` do echo $line done 当我通过上面的方式遍历文件的每一行,我发现读出来的数据是这样的: the first line. the second line. the third line.