我有一个由一些商业软件生成的文本文件,如下所示.它由括号分隔的部分组成,每个部分都有数百万个元素,但确切的值会从一个案例变为另一个案例.
(1
2
3
...
)
(11
22
33
...
)
(111
222
333
...
)
我需要实现如下输出:
1; 11; 111
2; 22; 222
3; 33; 333
... ... ...
我发现了一种复杂的方式:
>执行sed操作来获取
1
2
3
...
#
11
22
33
...
#
111
222
333
...
>使用awk如下将文件拆分为多个子文件
awk -v RS="#" '{print > ("splitted-" NR ".txt")}'
>使用sed再次从子文件中删除空格
sed -i '/^[[:space:]]*$/d' splitted*.txt
>将所有内容加入:
paste splitted*.txt > out.txt
>添加字段分隔符(在我的bash脚本中定义)
awk -v sep=$my_sep 'BEGIN{OFS=sep}{$1=$1; print }' out.txt > formatted.txt
我觉得这很糟糕,因为我循环了几百万行.
即使返回时间非常好(约80秒),我也想找到一个完整的awk解决方案,但无法实现.
就像是:
awk 'BEGIN{RS="(\\n)"; OFS=";"} { print something } '
我发现了一些相关的问题,特别是这一个row to column conversion with awk,但它假设括号之间有一定数量的线,我不能这样做.
任何帮助,将不胜感激.