输入文件中的列名:
UserID UserName DateCreated TimeCreated SessionID SessionName SessionAddress SessionStatus Host DeviceID DeviceName DeviceVersion DataUsed DataSent DeviceStatus
文件input.txt的内容:
string 08:John Doe 2016-05-31 23:55:45.678 0e:9999999999.999 string 0f:123.456.789.99 06:active 0f:123.456.789.111 0a:1234567890 samsung 0a:AA 00.12.1 0022a 0022b 06:active
string 09:Blah Blah 2016-05-31 23:57:05.248 0e:5628176599.999 string 0f:123.001.507.031 0f:123.456.789.111 0a:1234567890 0022c 0022d
string 0a:David Blah 2016-02-01 14:07:12.135 0e:3760973177.404 active 0f:123.456.789.111 0b:ABCD 34.5.1 0022a 0022b 06:active
存在缺少字段的空格。让我们用^替换单个空格,以便更好地了解和理解。以上替换为^的上述数据如下所示:
string^John Doe^2016-05-31^23:55:45.678^0e:9999999999.999^string^0f:123.456.789.99^06:active^0f:123.456.789.111^0a:1234567890^samsung^0a:AA 00.12.1^0022a^0022b^06:active
string^Blah Blah^2016-05-31^23:57:05.248^0e:5628176599.999^string 0f:123.001.507.031^^0f:123.456.789.111^0a:1234567890^^^0022c^0022d^
string^David Blah^2016-02-01^14:07:12.135^0e:3760973177.404^^^active^0f:123.456.789.111^^^0b:ABCD 34.5.1^0022a^0022b^06:active
有些字段在其中有空格,如UserName字段和DeviceVersion字段。在这里,解析器应该足够智能,以便尽可能读取该字段中的字符数(指定计数)并相应地进行解析。
缺少田地是完全未知的。我把这个输入用作样本。我已经尝试通过指定列号(静态)来使用awk。但我需要一些能够读取动态内容的东西。我不知道如何逐行阅读。
预期产出:
string,John Doe,2016-05-31,23:55:45.678,9999999999.999,string,123.456.789.99,active,123.456.789.111,1234567890,samsung,AA 00.12.1,554,555,active
string,Blah Blah,2016-05-31,23:57:05.248,5628176599.999,string,123.001.507.031,,123.456.789.111,1234567890,,,556,557,
string,David Blah,2016-02-01,14:07:12.135,3760973177.404,active,123.456.789.111,,,ABCD 34.5.1,554,555,active
修改
dataUsed和dataSent列是十六进制。它们将被转换为十进制。