拆分命令后删除换行符

时间:2014-08-25 22:36:11

标签: perl split

我有一个文件的时间戳格式为10:24:23 我想要做的是拆分这些时间戳,但拆分后删除新的行字符。我想要的输出是102423,但我目前得到的是: 10 \ N24 \ N23 \ n

这是我正在运行的脚本:


#!/usr/bin/perl
use warnings;
use strict;

my $cmd = `cat test.txt |awk {'print \$2')`;
my @array = $cmd;

my @values = split(':', $cmd);
print @values;

for (@values) {
    chomp $_;
    if ($_ == 102423) {
        print "Hello\n";
    }
}

当我打印出@values数组时,我看到了我想要的内容,'102423' 但是当我尝试if比较时,我得到一个错误,说我的变量不是数字。错误显示如下:“10 \ n24 \ n23不是数字”

感谢您抽出宝贵时间 欢呼声。

1 个答案:

答案 0 :(得分:2)

在您的代码中,您获取所有时间戳,然后将它们拆分为冒号,这会创建无效值:秒+换行符+以下时间戳的小时数。

逐行处理文件。无需从Perl调用awk。打开文件并使用(split)[1]获取第二列(并删除尾随换行符)。

#!/usr/bin/perl
use warnings;
use strict;

open my $IN, '<', 'test.txt' or die $!;  # Open the file.
while (<$IN>) {                          # Process it line by line.
    my $timestamp = (split)[1];          # Get the second column.
    $timestamp =~ tr/://d;               # Remove colons.
    if (102423 == $timestamp) {
        print "Hello\n";
    }
}