0

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

-------------------[ 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 
...
...

直到这里“大卫”帮助我使用 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 等......

4

4 回答 4

3

另一种选择是openpyxl在 python 中使用该模块:

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')

注意: 这有点脆弱,因为它依赖于始终遵循“用户”记录和“最后登录”记录的内联数据。如果不遵循此模式,则该过程将失败。例如,如果您有两个连续的用户记录,中间没有“上次登录”记录。

于 2012-10-17T21:19:42.753 回答
2

我认为最简单的方法是使用 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。

于 2012-10-17T21:12:15.270 回答
1

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

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

Python中有一些现有的库可以帮助您解决这个问题:

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

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

于 2012-10-17T20:07:41.813 回答