awk FS OFS RS ORS详解
详解 awk fs rs
2023-09-11 14:16:16 时间
awk默认从STDIN接受数据,打印文本到STDOUT
awk默认输出输入分割符:
- FS => Input field separater,字段分隔符, 默认空格类字符
- RS => Input record separater,行分隔符,默认\n
- OFS => Output field separater,输出字段分隔符,默认空格
- ORS => Output record separater,输出行分隔符,默认\n
-
echo '1a2a3a4a5' | awk -v RS=a '{print $0}'
echo '1a2a3a4a5' | awk '{BEGIN{RS="a"} {print $0}'
# 在shell中a没有引号可以直接作为string,但是放到awk中,a相当于变量,所有要加""定义RS='a'发现多打印空行,原因是echo输出了一个\n被最后一行的最后一个字段拿到,
本例中即是5\n但为什么$1,$2没有多打印空行呢?因为\n算是空字符,被当作field separater了,但是$0打印整体的时候
\n是会被打印成空行的,所以$2实际为空 - RS可以为正则表达式
echo -e '1ab2bc3cd4de5\c' | awk 'BEGIN{RS="[a-z]\+"} {print $0,RS,RT}'
# RS为分割符,RT为正则实际匹配到的内容 - print $0的时候OFS不会产生作用,此时被RS分割出来的record作为整体输出
路人甲 电话: 13777707771 手机: 010-12345678 路人乙 电话: 13912344321 手机: 010-56784321 QQ: 87654221
处理上述文件的时候,空格的格式为\n\n,在分割feild的过程中产生了NULL,即是我们定义的RS
-
echo "aaa bbb ccc" | awk -v OFS="|" '{print $0}' aaa bbb ccc echo "aaa bbb ccc" | awk -v OFS="|" '{$1=$1;print $0}' aaa|bbb|ccc
因为OFS是对字段进行操作的,只有我们对字段进行了操作,上面的结果才能正确的显现出来。除了利用$1=$1之外,我们还可以利用NF+=0同样可以实现类似的效果
上面原来文本的分隔符可以看做是”#\n”,重新定义记录分隔符的话可以定义为直接的回车符,字段的分隔符可以设置为空格。后面的$1=$1对字段操作,使OFS的定义生效。
- FS=""是,每个字符都是一段
- 当我们想以固定的长度来分隔列的时候,可以使用 FIELDWIDTHS 来代替 FS
例如,一行记录的前3个字符作为第一列,接下来的2个字符作为第二列,接下来的4个字符作为第三列 - awk默认将连续的空格,制表符(\t)换行符(\n)作为列分隔符,且会自动去掉行首和行尾的空格,制表符(\t)和(\n),但是FS="[ \t\n]"不会
- 打印自定义变量
- field使用正则匹配
172.16.20.200 51cjml.cn 172.16.20.200 v.51cjml.cn 172.16.20.200 superdirectory.51cjml.cn 172.16.20.200 crm.51cjml.cn 172.16.20.200 bauto.51cjml.cn 172.16.20.200 zhipei.51cjml.cn 172.16.20.200 shopcrm.51cjml.cn 172.16.20.200 vinmange.51cjml.cn 172.16.20.200 carmanage.51cjml.cn 172.16.20.200 cppmanage.51cjml.cn 172.16.20.200 cpsmanage.51cjml.cn
OFS只在使用$1,$2时打印才有用
- FS, RS等变量最要随便设置特殊字符
awk 'BEGIN{FS="UI";RS="";OFS="*"} {print $1,NF}' zz
设置FS="UI",后NF=1
awk -F"@" 'BEGIN{RS="";OFS="*"} {print $1,NF}' zz
设置特殊字符 @ 后,NF=2,是有问题的
相关文章
- 重定向、别名、绝对路径、相对路径 详解
- http缓存详解,http缓存推荐方案
- Maven的settings.xml配置详解
- 《Hadoop海量数据处理:技术详解与项目实战》一1.2 Hadoop和大数据
- 《单片机串口通信及测控应用实战详解》——6.2 单片机端程序设计
- Java接口 详解(二)
- css层次选择器(详解)
- Linux_awk命令详解
- 详解Vue中的nextTick
- Android 内存优化详解
- SpringBoot魔法堂:@MatrixVariable参数注解使用详解
- Linux awk命令详解
- 关系范式详解
- linux awk命令详解
- Hibernate注解详解
- spring mvc DispatcherServlet详解之二---request通过Controller获取ModelAndView过程
- Linux常用命令详解
- UML类图与类的关系详解
- 硬核测试script中的defer,async,最直观的认识,详解async,defer,一篇搞懂