我有一些非常大的文本文件,它们是旧主机应用程序的输出。我不再能够访问源应用程序,但需要对输出执行一些数据分析。
数据基本上是制表符分隔值,但由于源系统,它会包装值并根据行数和行数中断输出
文本文件的内容看起来像这样(这是模型数据):
Page 1:
Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8
------------------------------------------------------------
1111 1111 1111 1111 1111 1111 1111 1111
2222 2222 2222 2222 2222 2222 2222 2222
3333 3333 3333 3333 3333 3333 3333 3333
4444 4444 4444 4444 4444 4444 4444 4444
5555 5555 5555 5555 5555 5555 5555 5555
6666 6666 6666 6666 6666 6666 6666 6666
7777 7777 7777 7777 7777 7777 7777 7777
-----------------------------------------------------------
Col9 Col10 Col11
--------------------
1111 1111 1111
2222 2222 2222
3333 3333 3333
4444 4444 4444
5555 5555 5555
6666 6666 6666
7777 7777 7777
--------------------
Page 2:
Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8
------------------------------------------------------------
8888 8888 8888 8888 8888 8888 8888 8888
9999 9999 9999 9999 9999 9999 9999 9999
-----------------------------------------------------------
Col9 Col10 Col11
--------------------
8888 8888 8888
9999 9999 9999
--------------------
页面会持续一段时间。
我想以编程方式转换文件,以便列是连续的。即。最终的数据集看起来像一个更典型的CSV样式分隔文件。
Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9 Col10 Col11
------------------------------------------------------------------------------------
1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111
2222 2222 2222 2222 2222 2222 2222 2222 2222 2222 2222
3333 3333 3333 3333 3333 3333 3333 3333 3333 3333 3333
4444 4444 4444 4444 4444 4444 4444 4444 4444 4444 4444
5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
6666 6666 6666 6666 6666 6666 6666 6666 6666 6666 6666
7777 7777 7777 7777 7777 7777 7777 7777 7777 7777 7777
8888 8888 8888 8888 8888 8888 8888 8888 8888 8888 8888
9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
-------------------------------------------------------------------------------------
我不确定从哪里开始 - 我可以使用像AWK这样的东西来做这个或某种正则表达式。任何关于起点的帮助都将受到赞赏。
答案 0 :(得分:1)
我建议您可以使用csplit
命令和paste
命令执行此操作。
答案 1 :(得分:0)
我会使用解析器(例如Bison)。类似的东西:
goal:pages
pages: pages page
page: header rowsOfColumns { dumpCurrentPage(); }
header: "page" num { curColumn = 0; }
rowsOfColumns: rowsOfColumns aRow
aRow: colHeaders dashes colData dashes
colHeaders: colHeaders aHeader { createNewHeader($aHeader); }
dashes: '-'+
colData: colData aData { addToData(curCol++, $aData); }
这是一个非常不完整的答案,但由于没有人评论过去半小时我决定分享我的想法。不幸的是我暂时没有解析,所以我无法给出正确的答案。