从主机获取文本并格式化输出以进行分发

时间:2014-04-29 02:54:48

标签: linux awk scripting

我担心这是一项非常简单的任务,但我发现没有任何相关内容,所以这里也是如此。

我有一个文本文件,我从几个主机获取。基于SSH脚本获取数据的方式,它基本上是我正在执行的命令的输出,因此,输出,然后输出然后输出,例如下面。

hostname
1:card/function 
2:card/function 
3:card/function
4:card/function 
5:card/function 
6:card/function 
7:card/function 
8:card/function 
9:card/fucntion 
hostname 
1:card/function 
2:card/function 
3:card/function 
4:card/function 
5:card/function 
6:card/function 
7:card/function 
8:card/function 
9:card/function

这重复了很多次。

我想格式化输出,以便;

HOSTNAME | Slot1 | Slot2 | Slot3 | ....... Slot9 |

hostname 1:card/function 2:card/function 3:card/function .......9:card/function
hostname 1:card/function 2:card/function 3:card/function .......9:card/function

2 个答案:

答案 0 :(得分:0)

您可以使用此awk

awk '{$1=$1;printf (/hostname/&&NR>1?RS:"")"%s ",$0} END {print ""}'
hostname 1:card/function 2:card/function 3:card/function 4:card/function 5:card/function 6:card/function 7:card/function 8:card/function 9:card/fucntion
hostname 1:card/function 2:card/function 3:card/function 4:card/function 5:card/function 6:card/function 7:card/function 8:card/function 9:card/fucntion

您的数据在某些行后似乎有空格。 $1=$1解决了这个问题。

答案 1 :(得分:0)

awk '{printf "%s%s" , (NR>1&&(!/^[0-9]/)?"\n":""),$0} END{print ""}' file

这允许动态(真实)主机名字符串。

(有效的主机名不允许以数字开头,如果您的真实数据没有像number:这样的开头1:....,您可以检查/(slash),有效的主机名没有'允许slash