打印输出文件中的列

时间:2015-10-01 21:57:58

标签: linux bash shell

我使用以下命令获得了最后一个命令的输出

last -w -F | awk '{print $1","$3","$5$6$7$8","$11$12$13$14","$15}' | tac | tr ',' '\t'

现在对于相同的输出我想添加以下列名,然后复制到csv文件或xls文件。

有人可以帮助我。

列名

USERNAME
HOSTNAME
LOGIN_TIME
LOGOUT_TIME
DURATION

输出看起来像这样

oracle localhost 2015 2.30
root   localhost 2014 2.30

感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

试试这个:

last -w -F | awk '{print $1,$3,$5$6$7$8,$11$12$13$14,$15} END{print "USERNAME\tUSERNAME\tHOSTNAME\tHOSTNAME\tLOGIN_TIME\tLOGIN_TIME\tLOGOUT_TIME\tLOGOUT_TIME DURATION"}' OFS='\t' | tac

我在awk的END语句中添加了标题。这样,在tac运行后,标题将在开头。

我还将awk的OFS设置为选项卡,以便不再需要tr步骤。

我无法对此进行全面测试,因为我的last命令显然会产生与您不同的格式。

写入文件

要将上述输出写入文件,我们使用重定向:将stdout发送到文件:

last -w -F | awk '{print $1,$3,$5$6$7$8,$11$12$13$14,$15} END{print "USERNAME\tUSERNAME\tHOSTNAME\tHOSTNAME\tLOGIN_TIME\tLOGIN_TIME\tLOGOUT_TIME\tLOGOUT_TIME DURATION"}' OFS='\t' | tac >new.tsv

上面的代码生成一个制表符分隔的文件。选择制表符分隔格式的选项后,Excel应该能够读取此文件。

如果想要一个以逗号分隔的文件,那么我们需要的只是\t替换,

last -w -F | awk '{print $1,$3,$5$6$7$8,$11$12$13$14,$15} END{print "USERNAME,USERNAME,HOSTNAME,HOSTNAME,LOGIN_TIME,LOGIN_TIME,LOGOUT_TIME,LOGOUT_TIME DURATION"}' OFS=',' | tac >new.csv

如果我没记错的话,可以使用file-> open->文本文件在excel中打开它。