【发布时间】:2020-06-15 17:15:24
【问题描述】:
我有一个如下所示的文件:
abc \
d \
efgh \
i
jklmnop \
q \rst \
uv
wx
y \
z
对于每组末尾有反斜杠的连续行,我想将这些反斜杠排列在一条垂直的直线上。因此,上述示例的预期输出为:
abc \
d \
efgh \
i
jklmnop \
q \rst \
uv
wx
y \
z
我设法将 所有 反斜杠与该程序对齐:
$ awk '/\\$/ { sub(/\\$/,""); printf "%-20s\\\n",$0; next} 1' file
abc \
d \
efgh \
i
jklmnop \
q \rst \
uv
wx
y \
z
但我不知道如何从这里开始,所以我正在寻求指导。我尝试在 SO 上进行搜索,但最好的结果都是关于删除尾随反斜杠。
关于实际输入的详细信息:
- 行可以包含任何字符,包括反斜杠,并且由任意数量的字符组成,没有限制。
- 最后一个反斜杠前后可能有多个空格和制表符。
- 在最后一个反斜杠之前总是至少有一个空格或制表符。
- 没有一行仅由反斜杠和零个或多个空格/制表符组成。
附:我不是在寻找 Perl 解决方案。
【问题讨论】:
-
文件有多大?看起来它可能需要两次处理。另外,您如何确定此处的行长?
d有更多空格,但efgh有更多字符长度。这里应该优先考虑哪一个? -
@Inian 不超过 10 兆字节。最后一个非空白非制表符结束行
-
你能澄清一下你自己管理的东西有什么问题吗?
-
是否需要开始空格?
-
@Gilles 是的。还有anubhava,我不希望它看起来那样
标签: awk