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

ここまで、「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

エクセルではのようになります。

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

注:ここではusernameが異なる可能性がありますが、userXの例を示しましたが、spatel、jim、ericなどになります...

4

4 に答える 4

3

もう1つの方法は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')

注: これは、「最後のログオン」レコードを持つ「ユーザー」レコードに常に続くインラインデータに依存するため、やや脆弱です。このパターンに従わないと、プロセスは失敗します。たとえば、2つの連続したユーザーレコードがあり、その間に「最後のログオン」レコードがない場合です。

于 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がデータのテキストファイルである場合は、次のようにします。dataserver.csvを ./tocsv.sh dataserver.txt > dataserver.csv Excelにインポートできます。

于 2012-10-17T21:12:15.270 に答える
1

このソリューションは、データの各行が同じ列の1つのセルを占めるようにすることを前提としています。

  1. まだ行っていない場合は、データをテキスト(* .txt)ファイルとして保存します。
  2. Excelを起動します
  3. [ファイル]タブまたはメニューから[開く]を選択します(バージョンによって異なります)
  4. リストアイテム
  5. [開く]ダイアログで、ドロップダウンメニューを見つけて、[テキストファイル]オプションを選択します
  6. ダイアログコントロールを使用して、テキストファイル内のデータを含むディレクトリに移動します
  7. テキストファイルを選択して[開く]ボタンをクリックすると、インポートウィザードが起動します
  8. 最初の画面で、[区切り]を選択し、[次へ]をクリックします
  9. 2番目の画面で[次へ]をクリックします
  10. 最後の画面で[完了]をクリックします
于 2012-10-17T20:09:07.113 に答える
0

Pythonには、これを支援する既存のライブラリがあります。

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

私はExcelファイルを生成するための単純なシェルスクリプトソリューションを知りません。

于 2012-10-17T20:07:41.813 に答える