操纵文本文件中的行

问题描述 投票:-7回答:2

我有一个包含以下内容的文本文件:

1234  ^Y DATA ^Y DATA
1235  ^Y DATA ^Y DATA
1236  ^Y DATA ^Y DATA
/text text
/more text
1237  ^Y DATA ^Y DATA

第4行和第5行属于第3行的末尾,但它们在文本文件中写为换行符。如果不遵守NUMBER ^ Y,有没有办法追加前一行,并在发生这种情况时添加一组特定的字符?

在这种情况下,^ Y是字段分隔符。

bash perl unix
2个回答
0
投票
use strict;
use warnings;

my @out;
while (my $line = <DATA>) {
    chomp $line;
    # regex to check for NUMBER ^Y; 
    if ($line =~ /^\d+\s+\^Y/) {
        push @out, $line;
    } else {
        # append to the last element of the array
        $out[-1] .= ' *chars to add* '.$line;
    }
}

print $_."\n" for @out;

__DATA__
1234  ^Y DATA ^Y DATA
1235  ^Y DATA ^Y DATA
1236  ^Y DATA ^Y DATA
/text text
/more text
1237  ^Y DATA ^Y DATA

0
投票

awk救援!

$ awk '{if(/\^Y/){if(p) print p; p=$0} else p=p $0} 
    END{print p}' file

1234  ^Y DATA ^Y DATA
1235  ^Y DATA ^Y DATA
1236  ^Y DATA ^Y DATA/text text/more text
1237  ^Y DATA ^Y DATA
© www.soinside.com 2019 - 2024. All rights reserved.