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!!!




本文转自 转身撞墙角 51CTO博客,原文链接:http://blog.51cto.com/chentianwang/1682359
相关文章
|
6月前
|
安全 大数据 Linux
总结下 fs.file-max,ulimit -n 和 lsof的异同
总结下 fs.file-max,ulimit -n 和 lsof的异同
|
8月前
|
Perl
成功解决virsh -r net-dhcp-leases default | grep -i 00:16:3e:2d:95:85 | awk ‘{ print $5 }
成功解决virsh -r net-dhcp-leases default | grep -i 00:16:3e:2d:95:85 | awk ‘{ print $5 }
|
Perl
awk NR、F的用法
awk NR、F的用法
96 0
|
Unix Linux Shell
字符操作命令:cut、printf、awk、sed、sort、wc
cut 命令 cut命令用来显示行中的指定部分

热门文章

最新文章