• awk技巧【转】


    转自 awk技巧(如取某一行数据中的倒数第N列等) - 散尽浮华 - 博客园 https://www.cnblogs.com/kevingrace/p/8481965.html

    使用awk取某一行数据中的倒数第N列$(NF-(n-1))
    比如取/etc/passwd文件中的第2列、倒数第1、倒数第2、倒数第4列(以冒号为分隔符)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    [root@ipsan-node06 ~]# cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
     
    [root@ipsan-node06 ~]# awk -F":" '{print $2,$(NF),$(NF-1),$(NF-3)}' /etc/passwd
    x /bin/bash /root 0
    x /sbin/nologin /bin 1
    x /sbin/nologin /sbin 2
    x /sbin/nologin /var/adm 4
    x /sbin/nologin /var/spool/lpd 7
    x /bin/sync /sbin 0
    x /sbin/shutdown /sbin 0
    x /sbin/halt /sbin 0
    x /sbin/nologin /var/spool/mail 12
    x /sbin/nologin /root 0

    linux实现将文本文件每一行中相同第一列对应的其他列进行拼接

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    [root@jump-v4 ~]# sort b.txt|uniq
    1    34
    1    49
    2    45
    2    48
    3    54
    3    57
    3    89
     
    [root@jump-v4 ~]# sort b.txt|uniq|awk '{a[$1]=(a[$1]" "$2);} END{for(i in a) print i ":"a[i]}'
    1: 34 49
    2: 45 48
    3: 54 57 89
     
    命令解析:
    1)首先sort test|uniq实现对test文件的去重,去掉了重复的 1 49,保留不同的行;
    2)awk '{a[$1]=(a[$1]" "$2);} END{for(i in a) print i ":"a[i]}' 表示的含义是: 将每一行的第一列最为数组a的key,
       第二列作为a的value,同时碰到相同的key,就把其值进行拼接,linux的shell的字符串拼接形式为str = (str  “ ” $var),
       最后遍历数组a,其中i为数组a的每一个key,a[i]为key对应的值;

    使用awk命令获取文本的某一行,某一列的技巧:

    1
    2
    3
    4
    5
    6
    1)打印文件的第一列(域) : awk '{print $1}' filename
    2)打印文件的前两列(域) : awk '{print $1,$2}' filename
    3)打印完第一列,然后打印第二列 : awk '{print $1 $2}' filename
    4)打印文本文件的总行数 : awk 'END{print NR}' filename
    5)打印文本第一行 :awk 'NR==1{print}' filename
    6)打印文本第二行第一列 :sed -n "2, 1p" filename | awk 'print $1'

    Awk取文件中的指定数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    [root@jump-v4 ~]# cat a.txt
    123.122.123.12 12121212
    121.2332.121.11 232323
    255.255.255.255 21321
    123.122.123.12 12121212
    123.122.123.12 1212121er2
    123.122.123.12 12121212eer
    123.122.123.12 12121212ere
    255.255.255.255 21321
    121.2332.121.11 232323
    255.255.255.255 21321
     
    [root@jump-v4 ~]# cat a.txt|awk '{print $1}'
    123.122.123.12
    121.2332.121.11
    255.255.255.255
    123.122.123.12
    123.122.123.12
    123.122.123.12
    123.122.123.12
    255.255.255.255
    121.2332.121.11
    255.255.255.255
     
    [root@jump-v4 ~]# cat a.txt|awk '{print $1}'|sort|uniq -c
          2 121.2332.121.11
          5 123.122.123.12
          3 255.255.255.255
     
    [root@jump-v4 ~]# cat a.txt|awk '{print $1}'|sort|uniq -c|awk '{print $2,$1}'
    121.2332.121.11 2
    123.122.123.12 5
    255.255.255.255 3
     
    [root@jump-v4 ~]# cat a.txt|awk '{print $1}'|sort|uniq -c|awk '{print $2,$1}'|sort -k2 -rn
    123.122.123.12 5
    255.255.255.255 3
    121.2332.121.11 2

    linux文件按大小来排序

    1
    2
    3
    4
    5
    6
    [root@cdn ~]# ls -s | sort -k 1 -n
    表示对第一个字段(即文件大小)按数值大小进行排序;
    如果想倒序,可以增加-r参数;
    sort命令可进行排序;
    -k参数表示对第几个字段进行排序;
    ls -s:第一列显示的是文件大小

    定时删除resin日志的脚本,每小时删除一次

    1
    2
    3
    4
    5
    6
    [root@cdn ~]# cat resin-log.sh
    #!/bin/bash
    cd /data/log/resin && find /data/log/resin ( -name "*jvm-app-0.log.*" -a ! -name "*.gz" ) -a -mmin +30 -exec gzip  {} ;
     
    [root@cdn ~]# crontab -l
    0 * * * * /bin/bash -x /root/resin-log.sh >/dev/null 2>&1
  • 相关阅读:
    Delphi如何处理在进行大量循环时,导致的应用程序没有响应的情况
    [转]:Delphi 中的哈希表(1): THashedStringList
    C# 计算两个字符串的相似度
    中文字号VS英文字号(磅)VS像素值
    在C#中如何将多个rtf文件内容组合在一起用一个rtf文件保存?
    C#中用RichTextBox实现图文混排和保存的例子
    ISE MAP报错: Unsupported programming for BSCAN block and JTAG_CHAIN attribute value 1的解决方法
    [转]matlab如何复制spectrum scope的图
    iMpACT中的Xilinx Prom烧录
    【verilog】fdisplay中如何保存有符号形式
  • 原文地址:https://www.cnblogs.com/paul8339/p/9210287.html
Copyright © 2020-2023  润新知