2016-09-15 61 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