• awk打印第n个参数到最后一个技巧/将n行组成一列


    打印第n参数到最后一个参数

    • 文本的NF不等,即字段长度不固定,想截取从$3到$NF
    1. 第一反应是使用循环
    [root@localhost ~]# echo "1 2 3 4 5" | awk '{for(i=1;i<3;i++)$i="";print}'
      3 4 5
    
    1. 但其实可以使用CU帽神给的技巧
    [root@localhost ~]#echo "1 2 3 4 5" | awk '{$1=$2="";print}'
      3 4 5
    
    1. 如果分隔符比较标准的话(即使用的是统一的标准分隔符),建议还是用cut命令比较嗨皮
    [root@jizhong Fri Aug 18 14:05:26 ~]# echo "1 2 3 4 5" | cut -d" " -f3-
    3 4 5
    
    1. 帽子神写的从第三个到最后一个
    [root@jizhong Fri Aug 18 14:06:47 ~]# echo "1 2 3 4 5" | awk '{$1=$2=""}1'
      3 4 5
    
    其实第2种跟第4种是一样的,只是换用了一些技巧,省略print而已;总的来说,遇到这类情况使用cut会更好一点;使用cut会少去第一个空格,因为awk的默认分隔符为空格

    将多行文本内容合并为一行

    • 遇到一个4500行的文本,每行文本只有一段字符串且没有分隔符,现再想要将这个文本进行重组,每50行以逗号为分隔符合成一行
    文本内容格式如下
    MD_Q9_G1_F
    MD_Q9_G1_Ua
    MD_Q9_G1_Ub
    MD_Q9_G1_Uc
    MD_Q9_G1_Uab
    MD_Q9_G1_Ubc
    MD_Q9_G1_Uca
    MD_Q9_G1_Ia
    MD_Q9_G1_Ib
    MD_Q9_G1_Ic
    MD_Q9_G1_Pa
    MD_Q9_G1_Pb
    MD_Q9_G1_Pc
    MD_Q9_G1_Psum
    MD_Q9_G1_Qa
    MD_Q9_G1_Qb
    MD_Q9_G1_Qc
    MD_Q9_G1_Qsum
    MD_Q9_G1_Sa
    MD_Q9_G1_Sb
    MD_Q9_G1_Sc
    MD_Q9_G1_Ssum
    MD_Q9_G1_PFa
    MD_Q9_G1_PFb
    MD_Q9_G1_PFc
    MD_Q9_G1_PF
    
    1. 思路:分隔符对50取余,余数为0时,OFS= ,否则OFS=,
    awk '{ORS=NR%50?",":RS}1'
    
    1. 还有就是使用paste
    但是,paste只有将多行合并为一行,但并没有分割的功能
    要是有,希望大神指点
    
    1. 同样是对NR取余,但利用printf与print的换行区别来实现需求
    awk 'NR%50{printf $0",";next}1'   
    当NR取余非零时,执行{printf $0",";next},并跳过1(1表示print)
    当NR取余为零时,执行1({print $0})print默认换行
    
    1. 同样是对NR判断,但使用的额是三目运算符
    awk '{OFS=",";ORS=NR%50?OFS:RS}1'
    满足条件时,输出为OFS(即,)
    否则使用RS为输出符
    

    pattern省略或为1,等价于 /.*/

    action省略,等价于 { print $0 }

    awk将变量传给shell可以用eval, 如 eval $(awk 'BEGIN{print "a=ggg b=3"}')则shell变量$a就是ggg,shell变量$b就是3

  • 相关阅读:
    稀疏矩阵解题数学库 -- UMFPACK
    国外程序猿整理的C++大全
    SQL实用语句大全
    this 三句话
    ELK 7.4.2 单机安装配置
    简单搭建DNS服务器——bind
    关于博客皮肤
    Golang 实现 array_push
    Golang 发送POST请求,加header头,带参数
    Golang 签名
  • 原文地址:https://www.cnblogs.com/irockcode/p/7389571.html
Copyright © 2020-2023  润新知