根据文本

时间:2017-09-05 07:21:31

标签: 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开头的条目移动,并用相应的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

我无法想象如何确保"寻找下一次出现"应该执行,但希望有一个功能,我设法忽略了?

2 个答案:

答案 0 :(得分:2)

perl -nle'if (/^\D/) { $n=$_ } else { print "$n;$_" }' input.txt

有关其他用法,请参阅Specifying file to process to Perl one-liner

答案 1 :(得分:0)

$ 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