脚本将输出转换为Excel表格

我有包含以下数据的文件:

-------------------[ server10 ]------------------- user1 user2 user99 user100 -------------------[ server20 ]------------------- user1 user2 user10 user4 -------------------[ server30 ]------------------- user10 user30 user40 

我想把这个输出转换成Excel表格,这样我就可以向我的pipe理人员呈现。 任何想法怎么能做到这一点?

我想在Excel工作表中输出到以下格式:

 Hostname users server10 user1 user2 user99 user100 server20 user2 user10 user4 ... ... 

直到这里,“大卫”用Python帮助我(openpyxl)。 但在这里我有新的专栏(最后login时间),我想在Excel中添加,所以这里是例子。

  -------------------[ server10 ]------------------- user1 never user2 Oct 17, 2011 user99 Jan 01, 2007 user100 Feb 02, 2010 -------------------[ server20 ]------------------- user1 never user2 never user10 jul 17, 2001 user4 Dec 25, 1999 -------------------[ server30 ]------------------- user10 Aug 10, 2012 user30 never user40 never 

在Excel中,它会是这样的。

  Hostname users Last logon server10 user1 never user2 Oct 17, 2011 user99 ... user100 ... server20 user2 user10 user4 ... ... 

注:用户名可能会有所不同,我给你的例子userX,但它会是spatel,吉姆,埃里克等…

另一种select是在python中使用openpyxl模块:

 from openpyxl import Workbook import fileinput import re wb = Workbook() ws = wb.get_active_sheet() servercol = 0 usercol = 1 lastlogoncol = 2 currentrow = 1 # write column headers ws.cell(row=0, column=servercol).value = 'server' ws.cell(row=0, column=usercol).value = 'user' ws.cell(row=0, column=lastlogoncol).value = 'last logon' # process each line and copy to spreadsheet for line in fileinput.input("somedata.txt"): # user regex to extract server from line m = re.match("^[-\[\s]+(?P<server>server\d+)[-\]\s]+$", line) n = re.match("^\s+user\d+", line) # if server match then write to server column if(m): c = ws.cell(row = currentrow, column = servercol) c.value = m.group('server') # elif user match, then write to user column elif(n): c = ws.cell(row = currentrow, column = usercol) c.value = line # else write to last logon column else: c = ws.cell(row = currentrow, column = lastlogoncol) c.value = line currentrow = currentrow + 1 wb.save('mydata.xlsx') 

注意:这是有点脆弱的,因为它依赖于一个“用户”logging和“最后一次login”logging的内联数据。 如果没有遵循这个模式,那么这个过程将会失败。 例如,如果您有两个连续的用户logging,但没有“最后一次login”logging。

我认为最简单的方法是使用CSV(逗号分隔值)格式。 这个想法是重新格式化你的输出:

 server 10 , user 1 , user 2 , user 3 , user 4 server 20, user 1 , user 2 , user 3 etc. 

然后,将CSV文件导入到excel中,select“CSV”,然后“格式化”,确保值之间用逗号隔开。 下面我们来调用tocsv.sh脚本:

 #!/bin/bash cat $1 | while read line do user='' # if the line starts with ----, remove ---[ and ]---- testServer=$(sed -n '/---/p' <<< $line) if [ -n "$testServer" ]; then server=$(sed '/----/ s/-*\[// ; s/\]-*//' <<< $line) user='' else user=$line fi if [ -n "$user" ]; then echo $server ", "$user server='' fi done 

如果dataserver.txt是数据的文本文件,那么您执行: ./tocsv.sh dataserver.txt > dataserver.csv ,您可以将dataserver.csv导入到Excel中。

此解决scheme假定您希望每行数据占用同一列中的一个单元格。

  1. 如果您还没有这样做,请将您的数据保存为文本(* .txt)文件。
  2. 启动Excel
  3. 从“文件”选项卡或菜单中select“打开”(取决于版本)
  4. 项目清单
  5. 在“打开”对话框中,find下拉菜单并select“文本文件”选项
  6. 使用对话框控件导航到文本文件中包含数据的目录
  7. select文本文件,然后单击“打开”button,该button将启动“导入向导”
  8. 在第一个屏幕上,select“分隔”,然后单击“下一步”
  9. 在第二个屏幕上单击下一步
  10. 点击最后一个屏幕上的完成

Python中有现成的库来帮助你:

http://www.python-excel.org/

我不知道任何简单的shell脚本生成excel文件的解决scheme。