bash - 在主机名后的同一行上打印一行-操作文本脚本linux bash

标签 bash ssh sed awk

我通过运行以下命令来生成此/ temp / test文件

for i in `cat /tmp/hosts` ;
do ssh $i -t "echo $i;sudo /usr/sbin/ethtool -S eth1 | grep   discards";
done > /tmp/test

这是通过管道传输到test / tmp / test文件的命令的输出
yyyx01
     rx_ftq_discards: 0
     rx_discards: 0
     rx_fw_discards: 0
yyyx02
     rx_ftq_discards: 0
     rx_discards: 0
     rx_fw_discards: 45
yyyx03
     rx_ftq_discards: 0
     rx_discards: 0
     rx_fw_discards: 46
yyyx04
     rx_ftq_discards: 0
     rx_discards: 0
     rx_fw_discards: 47
yyyx05
     rx_ftq_discards: 0
     rx_discards: 0
     rx_fw_discards: 34022

我需要输出如下所示,以便可以将其拉入Excel工作表
yyyx01   0   0  0  0
yyyx02   0   0  0  45
yyyx03   0   0  0  46
yyyx04   0   0  0  47

谁能帮忙用代码实现这一目标?我可以将输出转储到临时文件中,如果无法通过SSH命令行完成,则可以使用命令对其进行操作

预先谢谢你

最佳答案

$ awk '{printf "%s%s", $NF, (NR%4 ? OFS : ORS)}' file
yyyx01 0 0 0
yyyx02 0 0 45
yyyx03 0 0 46
yyyx04 0 0 47
yyyx05 0 0 34022

如果要使用制表符或逗号或其他任何方式来代替字段之间的空白字符,只需设置OFS:
$ awk -v OFS=',' '{printf "%s%s", $NF, (NR%4 ? OFS : ORS)}' file
yyyx01,0,0,0
yyyx02,0,0,45
yyyx03,0,0,46
yyyx04,0,0,47
yyyx05,0,0,34022

$ awk -v OFS='\t' '{printf "%s%s", $NF, (NR%4 ? OFS : ORS)}' file
yyyx01  0       0       0
yyyx02  0       0       45
yyyx03  0       0       46
yyyx04  0       0       47
yyyx05  0       0       34022

关于bash - 在主机名后的同一行上打印一行-操作文本脚本linux bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21339612/

相关文章:

linux - 运行 bash -c scriptname arg 时 "$1"为空

linux - 如何在 linux 中使用特定标志执行 ssh 命令而不需要别名

mysql - 如何从 shell 脚本执行 MySQL 命令?

sed -f 没有针对多行输入文件运行多个类似的模式匹配命令(包括连接)?

regex - bash - 提取字符串的一部分

shell - 查找 2 个字符串之间的所有内容 -- Sed

linux - 通过 delim 将字符串拆分为数组时不包含最后一个空字符串

linux - 使用 bash 中的脚本将某些文件的小写字符更改为大写字符

bash - 在 bash 中,为什么 if [ 1 ] 不会失败?

java - 通过 SSH 使用 Selenium 运行 Firefox 时出现问题