Perl 基于文本将行转换为列

Perl 基于文本将行转换为列,perl,awk,Perl,Awk,我有一个相当大的文件(单列),数据类似于: BT1111 2.2.2.2/3 3.3.3.3/4 7.2.1.1/5 BT6766 2.2.1.1/5 4.5.1.1/7 BT9898 4.4.4.4/2 8.8.8.8/9 我希望找到一个可以将其对齐为两列的函数,方法是将以数字一列($1到$2)开头的所有条目移动到$2)并使用相应的BT字段对其进行充实,因此所需的输出应该是 BT1111;2.2.2.2/3 BT1111;3.3.3.3/4 BT1111;7.2.1.1/5 BT6766;2

我有一个相当大的文件(单列),数据类似于:

BT1111
2.2.2.2/3
3.3.3.3/4
7.2.1.1/5
BT6766
2.2.1.1/5
4.5.1.1/7
BT9898
4.4.4.4/2
8.8.8.8/9
我希望找到一个可以将其对齐为两列的函数,方法是将以数字一列(
$1
$2
)开头的所有条目移动到
$2
)并使用相应的BT字段对其进行充实,因此所需的输出应该是

BT1111;2.2.2.2/3
BT1111;3.3.3.3/4
BT1111;7.2.1.1/5
BT6766;2.2.1.1/5
BT6766;4.5.1.1/7
BT9898;4.4.4.4/2
BT9898;8.8.8.8/9
我无法想象如何确保“寻找下一个事件”应该被执行,但希望有一个功能我已经设法忽略了

$ awk '/BT/{a=$1; next}{print a ";" $1}' input.txt
BT1111;2.2.2.2/3
BT1111;3.3.3.3/4
BT1111;7.2.1.1/5
BT6766;2.2.1.1/5
BT6766;4.5.1.1/7
BT9898;4.4.4.4/2
BT9898;8.8.8.8/9
有关其他用法,请参阅


有关其他用法,请参阅。

非常感谢通过解析它,我意识到我忽略了造成混乱的换行操作——在去掉这些换行操作后,这个简单的解决方案正是我梦寐以求的。根据最初的问题,标准是“所有条目都以数字开头”,而不是“条目不以“BT”开头”.
。并使用相应的BT字段对其进行充实。
OP提供的输入非常清晰。非常感谢!-通过解析它,我意识到我忽略了造成混乱的换行操作——在去掉这些换行操作后,这个简单的解决方案正是我梦寐以求的。根据最初的问题,标准是“所有条目都以数字开头”,而不是“条目不以“BT”开头”.
。并使用相应的BT字段对其进行充实。
OP提供的输入是清晰的。
perl -nle'if (/^\D/) { $n=$_ } else { print "$n;$_" }' input.txt