我有包含以下数据的文件:
-------------------[ server10 ]-------------------
user1
user2
user99
user100
-------------------[ server20 ]-------------------
user1
user2
user10
user4
-------------------[ server30 ]-------------------
user10
user30
user40
我想将此输出转换为Excel表格,以便我可以将TI呈现给我的管理。任何想法怎么办???
我希望在Excel表中输出以下格式:
Hostname users
server10 user1
user2
user99
user100
server20 user2
user10
user4
...
...
直到这里" David"帮助我使用Python(OpenPyXl)。但是在这里我有新的列(最后一个登录时间),我想在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,Jim,Eric等...
另一种选择是在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>serverd+)[-]s]+$", line)
n = re.match("^s+userd+", 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')
注意:这有些脆弱,因为它取决于内联数据始终遵循带有"最后登录"记录的"用户"记录。如果不遵循此模式,则过程将失败。例如,如果您有两个连续的用户记录,没有"最后的登录"记录。
我认为最简单的方法是使用CSV(逗号分隔值)格式。这个想法是像这样重新格式化您的输出:
server 10 , user 1
, user 2
, user 3
, user 4
server 20, user 1
, user 2
, user 3
etc.
然后,将CSV文件导入Excel,选择" 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中。
此解决方案假设您希望数据的每一行都在同一列中占据一个单元格。
- 如果您还没有这样做,请将数据保存为文本(*.txt)文件。
- 启动Excel
- 从"文件"选项卡或菜单中选择"打开"(取决于版本)
- 列表项目
- 在"打开对话框"中,找到下拉菜单,然后选择"文本文件"选项
- 使用对话框控件导航到文本文件中包含数据的目录
- 选择文本文件,然后单击"打开"按钮,该按钮将启动导入向导
- 在第一个屏幕上,选择"划界",然后单击下一步
- 单击第二个屏幕上的下一个
- 单击最后一个屏幕上的完成
python中有现有库可以帮助您:
http://www.python-excel.org/
我不知道用于生成Excel文件的任何简单的Shell脚本解决方案。