zoukankan      html  css  js  c++  java
  • awk空行合并

      

     1 [root@localhost ~]#cat urfile
     2 [DEFAULT]
     3 key1=value1
     4 key2=value2
     5 key3=value3
     6 
     7 
     8 [agent]
     9 key1=value1
    10 key2=value2
    11 key3=value3
    12 
    13  
    14 
    15 
    16 [database]
    17 key1=value1
    18 key2=value2
    19 key3=value3
    20 
    21 
    22 [redis]
    23 key1=value1
    24 key2=value2
    25 key3=value3

    需求:
    文本开头没有空行,section之间的空行行数不定,最后一个section之后也有n行空行,想将section之间的空行压缩成一行

    解法一:
    PF大神太绝了,直接一个cat -s urfile就搞定了;将多行空行合并成一行

    解法二:
    awk除去空行awk NF urfile
    但没有做过将多行合并成一行,第一反应是用脚本
    不过更喜欢awk一行流

    [root@localhost ~]#awk -vRS="" '{print $0"
    "}' urfile
    

      

    开始对这个不是很理解,只是懂将行分隔符替换成空了

    [root@localhost ~]#awk -vRS="" '{print NR $0"
    "}' urfile
    1[DEFAULT]
    key1=value1
    key2=value2
    key3=value3
    
    2[section1]
    key1=value1
    key2=value2
    key3=value3
    
    3[section2]
    key1=value1
    key2=value2
    key3=value3
    
    4[section3]
    key1=value1
    key2=value2
    key3=value3
    
    [root@localhost ~]#awk -vRS="" '{print $0"END"}' urfile
    [DEFAULT]
    key1=value1
    key2=value2
    key3=value3END
    [section1]
    key1=value1
    key2=value2
    key3=value3END
    [section2]
    key1=value1
    key2=value2
    key3=value3END
    [section3]
    key1=value1
    key2=value2
    key3=value3END
    
     
    

      


    如果RS被设置为空,那么awk会将连续的空行作为行分隔符,与RS设置成" +"有什么区别???
    1、忽略文件开头和结尾的空行。且文件不以记录分隔符结束,即最后不是空行,会将最后一个记录的尾 去掉
    2、设置RT变量未空
    3、影响FS变量
    这个怎么理解?对于1、2两点,当作习题留给大家自己测试,3我们下节来讲。

    总结下RS的3种情况:
    1) 非空字符串
    以固定字符串作为行分隔符,同时设置变量RT为固定字符串
    2) 正则表达式
    以正则表达式作为行分隔符,同时设置变量RT为正则表达式实际匹配到的字符串
    3) 空字符
    以连续的空行作为行分隔符,如果FS为单个字符,会将 强制加入到FS变量中

    理解了RS,再来理解ORS就简单了。RS是awk读取文件时的行分隔符,ORS则是awk输出时的行结束符。
    更简单的讲,就是awk在输出时,会在每行记录后面增加一个ORS变量所设定的值。
    ORS的值只能设定为字符串,默认情况下,ORS的值是


    TIM的awk十三问
    http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1790335&page=1&authorid=666268

  • 相关阅读:
    新学期,新起点
    判断整数的正负零特性
    C# 静态类与非静态类、静态成员的区别
    适配器模式:类适配器和对象适配器
    设计模式学习笔记
    C# 全局变量的实现
    设计模式
    Tuples in .Net 4 (System.Tuple)
    EnableViewState
    HashMap 、HashTable、HashSet的区别
  • 原文地址:https://www.cnblogs.com/irockcode/p/7168849.html
Copyright © 2011-2022 走看看