脚本将输出转换为Excel表



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

-------------------[ 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中。

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

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

python中有现有库可以帮助您:

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

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

相关内容

  • 没有找到相关文章