如何在shell脚本中以表格格式打印数据?

时间:2015-03-16 16:40:14

标签: bash shell awk sed substring

我正在开发一个需要以表格格式显示数据的脚本。 例如:从下面的数据中,(我只是以表格格式表示以便更好地理解)。我需要使用下面的列代码来形成一个表。如果特定唯一ID的代码值为0,0,1那么它就是一个失败的情况(例如:

17348514-1426250247230 has executed 3 times 0,0,1)
                                            F,F,S  will be considered as a failure case.


Year Mon D  Time Stamp     Unique ID                TT      Code
2015 Mar 13 09:48:16:099 -813380420-1426240092971  3.037     1
2015 Mar 13 09:54:47:525 -477148470-1426240484040  3.402     1
2015 Mar 13 11:26:42:728 1290473798-1426245992973  3.455     1
2015 Mar 13 12:37:27:338 17348514-1426250247230    0.008     0
2015 Mar 13 12:37:27:346 17348514-1426250247230    0.016     0
2015 Mar 13 12:37:27:354 17348514-1426250247230    0.024     1
2015 Mar 13 12:45:56:452 1124502614-1426250756375  0.009     0
2015 Mar 13 12:45:56:460 1124502614-1426250756375  0.017     0
2015 Mar 13 12:45:56:467 1124502614-1426250756375  0.024     1
2015 Mar 13 12:54:29:835 289692663-1426251267376   2.384     1
2015 Mar 13 13:24:53:226 2011983525-1426253085135  2.574     1
2015 Mar 13 14:28:13:076 -74229411-1426256890662   2.339     1

结果表应按以下格式打印。我不想打印总成功,总错误。下面是一个成功的一个.Hence成功计数为1,错误计数为0.

Date      Hour  Time    UniqueID               Success   Error      timetaken
2015Mar13 14    14:28  -74229411-1426256890662   1          0         2.339 

From the first table,
2015 Mar 13 12:37:27:338 17348514-1426250247230    0.008     0
2015 Mar 13 12:37:27:346 17348514-1426250247230    0.016     0
2015 Mar 13 12:37:27:354 17348514-1426250247230    0.024     1

这是失败案例。所以结果表格格式需要打印如下(添加到上面的行)

Date      Hour  Time    UniqueID               Success   Error      timetaken
2015Mar13 14    14:28  -74229411-1426256890662   1          0         2.339     
2015Mar13  12    12:37  17348514-1426250247230   0          1         0.024     

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

TXR语言:

Year Mon @(skip)
@(collect)
@year @month @day @hh:@mm:@ss:@msec @id @val @code
@  (collect :gap 0 :vars (aval))
@(skip) @id @aval @nil
@  (end)
@  (set code @(int-str code))
@  (bind total @(or [aval -1] val))
@(end)
@(output)
Date      Hour  Time    UniqueID                 Success   Error      timetaken
@  (repeat)
@year@month@{day 2} @hh    @hh:@mm   @{id 24} @{code 9} @{@(- 1 code) 10} @total
@  (end)
@(end)

执行命令

$ txr reformat.txr data
Date      Hour  Time    UniqueID                 Success   Error      timetaken
2015Mar13 09    09:48   -813380420-1426240092971 1         0          3.037
2015Mar13 09    09:54   -477148470-1426240484040 1         0          3.402
2015Mar13 11    11:26   1290473798-1426245992973 1         0          3.455
2015Mar13 12    12:37   17348514-1426250247230   0         1          0.024
2015Mar13 12    12:45   1124502614-1426250756375 0         1          0.024
2015Mar13 12    12:54   289692663-1426251267376  1         0          2.384
2015Mar13 13    13:24   2011983525-1426253085135 1         0          2.574
2015Mar13 14    14:28   -74229411-1426256890662  1         0          2.339