zoukankan      html  css  js  c++  java
  • Linux中往文件中的某行插入数据 以及 行列转化的做法(paste、xargs等)

    sed -i 'nix' test.file        表示向test.file文件里的第n行的前面添加x内容
    sed -i 'nax' test.file       表示向test.file文件里的第n行的后面添加x内容

    sed -i '/m/ix' test.file     表示向test.file文件里匹配m字符串的行的前面添加x内容
    sed -i '/m/ax' test.file    表示向test.file文件里匹配m字符串的行的后面添加x内容

    -i     表示in front,前面
    -a    表示after,后面

    比如向a.txt文件的首行添加123456789
    # sed -i '1i123456789' a.txt

    比如向a.txt文件的第3行添加hhhhh
    # sed -i '3ahhhhh' a.txt

    比如向a.txt文件匹配abcd字符串的行的前面添加66666
    # sed -i '/abcd/i66666' a.txt

    比如向a.txt文件匹配1234字符串的行的后面添加hahaha
    # sed -i '/1234/ahahaha' a.txt

    在/etc/my.cnf文件中匹配[mysqld]行的下面添加"skip-grant-tables", 注意[mysqld]前面需要加一个转义符!
    # sed -i '/[mysqld]/askip-grant-tables' /usr/local/mysql/my.cnf

    比如向/etc/puppet/puppet.conf文件中的第2行的前面添加" server=puppet01.test.cn"内容
    然后再向第3行添加" runinterval = 600"内容
    # /bin/sed -i '2i server=puppet01.test.cn' /etc/puppet/puppet.conf
    # /bin/sed -i '3i runinterval = 600' /etc/puppet/puppet.conf

    ##################   远程批量关闭进程main的脚本   ##################

    [root@kevn script]# cat 6_main_stop.sh 
    #!/bin/bash
    for i in $(cat /opt/ip.list)
    do
    ssh -p22 root@$i 'ps -ef|grep main|grep -v grep|awk -F" " "{print $2}"|xargs kill -9 >/dev/null 2>&1'
    done
    

    ##################  取文件中最后一个字符  ################## 

    取最后一个字符:awk '{print substr($0,length())}' filename
    [root@localhost ~]# cat a
    3G
    32G
    123G
    2348G
    123131G
    123123123123123G
    [root@localhost ~]# awk '{print substr($0,length())}' a
    G
    G
    G
    G
    G
    G
    [root@localhost ~]# awk -F"G" '{print $1}' a
    3
    32
    123
    2348
    123131
    123123123123123

    ##################  将多行文本转换成一行并用逗号隔开  ################## 

    [root@kevin ~]# cat test
    172.16.60.211
    172.16.60.212
    172.16.60.213
    172.16.60.214
    172.16.60.215
    172.16.60.216
    172.16.60.217
    172.16.60.218
    172.16.60.219
    172.16.60.220
    172.16.60.221
     
    1)使用xargs方法,并用tr实现逗号隔开
    [root@kevin ~]# cat test| xargs | tr ' ' ','   
    172.16.60.211,172.16.60.212,172.16.60.213,172.16.60.214,172.16.60.215,172.16.60.216,172.16.60.217,172.16.60.218,172.16.60.219,172.16.60.220,172.16.60.221
     
    2)使用sed实现多个字符串的替换。sed可以替换多个字符串,可以弥补tr的不足,后面g表示匹配多个。
    [root@kevin ~]# cat test |xargs|sed 's/ /,/g'
    172.16.60.211,172.16.60.212,172.16.60.213,172.16.60.214,172.16.60.215,172.16.60.216,172.16.60.217,172.16.60.218,172.16.60.219,172.16.60.220,172.16.60.221

    ##################  将一行内容按照字段分为多列  ################## 

    [root@k8s-master01 ~]# cat a.txt
    172.20.100.100,172.20.100.101,172.20.100.102,172.20.100.103,172.20.100.104,172.20.100.105,172.20.100.106
    
    将逗号替换为换行
    [root@k8s-master01 ~]# sed 's/,/
    /g' a.txt
    172.20.100.100
    172.20.100.101
    172.20.100.102
    172.20.100.103
    172.20.100.104
    172.20.100.105
    172.20.100.106
    
    [root@k8s-master01 ~]# sed -i 's/,/
    /g' a.txt
    [root@k8s-master01 ~]# cat a.txt
    172.20.100.100
    172.20.100.101
    172.20.100.102
    172.20.100.103
    172.20.100.104
    172.20.100.105
    172.20.100.106

    ##################  paste命令用法  ################## 
    paste 命令用于合并文件的列,会把每个文件以列对列的方式,一列列地加以合并。

    语法
    paste [-s][-d <间隔字符>][--help][--version][文件...]
    
    参数:
    -d<间隔字符>或--delimiters=<间隔字符> : 用指定的间隔字符取代跳格字符。
    -s或--serial:  串列进行而非平行处理。
    --help:  在线帮助。
    --version:  显示帮助信息。
    [文件…]:  指定操作的文件路径
    
    比如:
    paste file testfile testfile1            #合并指定文件的内容 
    paste file testfile testfile1  -d ":"    #合并指定文件的内容,并使用逗号隔开。-d后面的分隔符可以自行定义!
    paste -s file     # 合并指定文件的多行数据。使用-s参数可以将一个文件中的多行数据合并为一行进行显示。
    
    示例如下:
    [root@kevin ~]# cat aa.txt
    11
    22
    33
    44
    55
    [root@kevin ~]# cat bb.txt
    aa
    ab
    ac
    cc
    cd
    
    使用paste命令将文件进行合并
    [root@kevin ~]# paste aa.txt bb.txt
    11 aa
    22 ab
    33 ac
    44 cc
    55 cd
    
    合并后使用":"隔开
    [root@kevin ~]# paste -d":" aa.txt bb.txt
    11:aa
    22:ab
    33:ac
    44:cc
    55:cd
    
    合并后使用"-"隔开
    [root@kevin ~]# paste -d"-" aa.txt bb.txt
    11-aa
    22-ab
    33-ac
    44-cc
    55-cd
    
    paste -s 可以将一个文件中的多行内容合并为一行。例如:
    [root@kevin ~]# cat file 
    111
    222
    333
    444
    555
    [root@kevin ~]# cat file |paste -s
    111     222     333     444     555
    [root@kevin ~]# cat file |paste -s -d":"
    111:222:333:444:555
    [root@kevin ~]# cat file |paste -s -d ":"
    111:222:333:444:555
    [root@kevin ~]# cat file |paste -s -d "-"  
    111-222-333-444-555
    [root@kevin ~]# cat file |paste -s -d "---"
    111-222-333-444-555
    [root@kevin ~]# cat file |paste -s -d ","  
    111,222,333,444,555
    
    看下面一个小需求:
    有一个log.txt文件,第二列是ip,现在需要将log.txt文件中的ip列取出来放在一行,并用逗号隔开。
    
    第一种做法:awk + paste
    [root@kevin ~]# cat log.txt 
    17:05 172.16.60.34 sadfjsafjsdf
    17:14 172.16.60.35 asdfasudfasjfasjfklsafsaf
    17:45 172.16.60.38 dsafkjdsajflsajfadf
    
    [root@kevin ~]# cat log.txt 
    17:05 172.16.60.34 sadfjsafjsdf
    17:14 172.16.60.35 asdfasudfasjfasjfklsafsaf
    17:45 172.16.60.38 dsafkjdsajflsajfadf
    
    [root@kevin ~]# cat log.txt |awk '{print $2}'
    172.16.60.34
    172.16.60.35
    172.16.60.38
    
    [root@kevin ~]# cat log.txt |awk '{print $2}'|paste -s
    172.16.60.34    172.16.60.35    172.16.60.38
    
    [root@kevin ~]# cat log.txt |awk '{print $2}'|paste -s -d","
    172.16.60.34,172.16.60.35,172.16.60.38
    
    另一种做法是:awk + xargs + sed
    [root@kevin ~]# cat log.txt |awk '{print $2}'
    172.16.60.34
    172.16.60.35
    172.16.60.38
    [root@kevin ~]# cat log.txt |awk '{print $2}'|xargs
    172.16.60.34 172.16.60.35 172.16.60.38
    [root@kevin ~]# cat log.txt |awk '{print $2}'|xargs|sed 's/ /,/g'
    172.16.60.34,172.16.60.35,172.16.60.38
  • 相关阅读:
    Jetty 的工作原理以及与 Tomcat 的比较
    基于Tengine的反向代理详细配置
    mysql定时脚本(event),类似oracle的job
    mysql 强制走索引
    如何检查mysql中建立的索引是否生效的检测方法及相关参数说明
    MySQL查询不使用索引汇总
    [大牛翻译系列]Hadoop 翻译文章索引
    [牛感悟系列]JAVA(1)理解JAVA垃圾回收
    [大牛翻译系列]Hadoop系列性能部分完结
    [大牛翻译系列]Hadoop(22)附录D.2 复制连接框架
  • 原文地址:https://www.cnblogs.com/kevingrace/p/7273241.html
Copyright © 2011-2022 走看看