【问题标题】:bash merge lines that start and end the samebash合并开始和结束相同的行
【发布时间】:2013-01-23 20:10:34
【问题描述】:

各位大佬,这个文件怎么转:

ops01.mysite.com /dev/mapper/sys-home 7700480  602202 7098278    8% /home
ops01.mysite.com /dev/mapper/sys-tmp   512000     471  511529    1% /tmp
ops01.mysite.com /dev/mapper/sys-var   512000    3236  508764    1% /var
ops01.mysite.com /dev/mapper/sys-home   58G   26G   30G  47% /home
ops01.mysite.com /dev/mapper/sys-tmp   3.9G  2.3G  1.5G  61% /tmp
ops01.mysite.com /dev/mapper/sys-var   3.9G  533M  3.2G  15% /var
ops02.mysite.com /dev/mapper/sys-home 3424256  250425 3173831    8% /home
ops02.mysite.com /dev/mapper/sys-tmp   262144      17  262127    1% /tmp
ops02.mysite.com /dev/mapper/sys-var   262144    2647  259497    2% /var
ops02.mysite.com /dev/mapper/sys-home   52G  9.5G   40G  20% /home
ops02.mysite.com /dev/mapper/sys-tmp   4.0G  137M  3.7G   4% /tmp
ops02.mysite.com /dev/mapper/sys-var   4.0G  419M  3.4G  11% /var

进入这个:

ops01.mysite.com /dev/mapper/sys-home 7700480  602202 7098278    8% /home   ops01.mysite.com /dev/mapper/sys-home   58G   26G   30G  47% /home
ops01.mysite.com /dev/mapper/sys-tmp   512000     471  511529    1% /tmp    ops01.mysite.com /dev/mapper/sys-tmp   3.9G  2.3G  1.5G  61% /tmp
ops01.mysite.com /dev/mapper/sys-var   512000    3236  508764    1% /var    ops01.mysite.com /dev/mapper/sys-var   3.9G  533M  3.2G  15% /var
ops02.mysite.com /dev/mapper/sys-home 3424256  250425 3173831    8% /home   ops02.mysite.com /dev/mapper/sys-home   52G  9.5G   40G  20% /home
ops02.mysite.com /dev/mapper/sys-tmp   262144      17  262127    1% /tmp    ops02.mysite.com /dev/mapper/sys-tmp   4.0G  137M  3.7G   4% /tmp
ops02.mysite.com /dev/mapper/sys-var   262144    2647  259497    2% /var    ops02.mysite.com /dev/mapper/sys-var   4.0G  419M  3.4G  11% /var

所以当目录相同时,合并这些行 (在 OSX 中,df 命令输出 inode 和空间使用情况,但在我使用的这个 redhat 中,我必须运行一个 df -h 来获取空间使用情况,以及一个 df -i 来获取 inode 使用情况)

我用过:

cat file | sed 's/[0-9]% /*\n/ /'

尝试在每个 '%' 之后替换下一行中的文本...但这根本不起作用...:S 而且我无法按“ops01.mysite.com”进行过滤,因为我不知道要检查多少台服务器。 提前致谢

【问题讨论】:

    标签: linux bash shell sed awk


    【解决方案1】:

    分别运行 2 个 df 命令,将它们的结果保存到单独的文件中,然后 join 这两个文件。

    df > df-size
    df -i > df-inodes
    join df-size df-inodes
    

    【讨论】:

    • bash 一个班轮:加入
    • 没关系,但我需要这样报告:FilesystemSpaceSizeSpaceUsedSpaceAvailSpaceAvailSpaceCapacityiusedifree%iusedso,MountedOn如果可以合并这些行,那么这将是awk {choose your columns} 的问题
    • @dimba 你的一个班轮正在给我结果:D,也许我不需要那么努力就能完成这项工作:D 谢谢:D :D :D
    【解决方案2】:
    awk '{a[$1$2]=a[$1$2]" "$0;next}END{for(i in a){print a[i]}}' your_file
    

    查看here

    【讨论】:

      猜你喜欢
      • 2019-02-14
      • 1970-01-01
      • 2013-10-21
      • 2015-06-13
      • 2020-04-08
      • 2019-09-20
      • 1970-01-01
      • 2017-04-13
      • 1970-01-01
      相关资源
      最近更新 更多