2016-09-15 105 views
0

我使用的是從this question此代碼:輸出AWK導致成乳膠生成的PDF表格上OSX

awk -F ':' '{ if(length($4)) { gsub(",", "\n", $4); print $4 } }' /etc/group | \ 
    sort | uniq -c 

它打印到控制檯這樣的:

3 _calendar 
    1 _cyrus 
    4 _devicemgr 
    1 _dovecot 
    1 _eppc 
    2 _jabber 
    1 _locationd 
    2 _postfix 
    1 _softwareupdate 
    1 _taskgated 
    6 _teamsserver 
    1 _warmd 
    1 _xserverdocs 
    11 root 

現在我想拿到輸出,並創建乳膠表,然後用它生成pdf。

可能嗎?

+3

當然,這是可能的(甚至實際)。但S.O.不是免費的編碼服務。預計您將展現您解決問題的最佳嘗試。請更新你的Q與你最好的谷歌乳膠表 - > pdf。祝你好運。 – shellter

回答

3
awk -F ':' '{ if(length($4)) { gsub(",", "\n", $4); print $4 } }' /etc/group \ 
    | sort \ 
    | uniq -c \ 
    | sed 's/_/\\_/g' \ 
    | awk 'BEGIN{print "\\documentclass{article}\\begin{document}\\begin{tabular}{cc}"} {printf "%s & %s\\\\\n", $1, $2} END{ print "\\end{tabular}\\end{document}" }' \ 
    | pdflatex --jobname table -- 

編輯:

  1. 這裏sed命令確保下劃線被變換成_,否則乳膠會抱怨沒有數學模式(因爲_將被解釋爲數學下標)。或者,可以用\textunderline代替所有的_,它甚至可能更好看。

  2. BEGINawkEND用於打印文檔的一個合適的頁眉/頁腳

  3. pdflatex --jobname table --意味着pdflatex將生成一個文件table.pdf和從標準輸入讀取的輸入

+0

你可以在sed'上放一點點嗎?沒有它可以做到嗎? – s1ddok

+0

我已經更新了答案... – ewcz

2

您可以使用以下內容(來自@Jonathan Leffler的代碼從另一個問題得到啓發)完整地登錄gawk(您將需要安裝):

gawk -F: 'BEGIN { 
     print "\\documentclass{article}" 
     print "\\begin{document}" 
     print "\\begin{tabular}{ l l l }" 
    } 
    { 
     nb_users = split($4, users, ",") 
     for (i=1; i <= nb_users; i++) { 
      users_count[users[i]]++ 
     } 
    } 
    END { 
     asorti(users_count) 
     for (user in users_count) { 
      print user, "&", users_count[user], "\\\\" 
     } 
     print "\\end{tabular}" 
     print "\\end{document}" 
    }' /etc/group | pdflatex -jobname output 

編輯:更正添加排序和PDF生成

+0

雖然它不支持排序.. +如何從中生成pdf? – s1ddok