2012-12-31 58 views
-2

我有一个名为test.txt的文件名,内容如下。awk gsub in perl

cat test.txt 
MOD_12345_67890 

我需要的文件

在摆脱 “mod_个” 我Perl中

my $file = `awk '{gsub("MOD_", "");print}' test.txt`; 

。它删除MOD_并按预期打印12345_67890,但输出后有更多空格。

我的输出语句是

my $new_file = $file . ".dat"; 
print "$new_file"; 

我的输出应该如下。

12345_67890.dat 

,但我得到的输出作为

12345_67890 
.dat 

.DAT在下一行即将

谁能帮我去掉空格或垃圾值后的数字输出应该是12345_67890.dat

回答

0

Perl默认不处理其输入。这意味着每个输入行的尾随换行符仍然存在,这与Awk不同。您需要输入chomp换行符,或者执行s/$/.dat/之类的操作。或者使用-l选项运行Perl,该选项将从输入中删除换行符并将其添加回输出。

您对gsub的问题不是很清楚。删除前导“MOD_”,s/^MOD_//。在一个表达式中做两个替换,perl -pe 's/^MOD_(.*)$/$1.dat/' test.txt。圆括号将其匹配成$1;附加括号创建额外的反向引用$2$3

+0

.dat是一个打印语句。 不应该将.dat添加到perl或awk语句。 只是想摆脱test.txt中的空格 – user1603530

+0

如果行是换行符,而不是空格,您会在末尾看到什么。 – tripleee

0

只要做到:

$file =~ s/^MOD_//; 

将从字符串的开头去掉 “mod_个”。为了模拟awk的GSUB功能为你写它,这样做:

$file =~ s/MOD_//g; 

这将从字符串中的任何去掉‘mod_个’的所有事件。在这种情况下没有理由使用反引号(从来没有理由使用反引号代替qx!)。

+0

$ test.txt是具有“MOD_”的文件。我需要在将“MOD_”移除到$ file后编写输出。我该怎么做 – user1603530

+0

你总是可以使用'Tie :: File'('perldoc tie'获取详细信息) –

+0

或者只是'perl -i -pe'/ MOD _ // g'test.txt'(注意,这个将修改'test.txt'。) –