如何用二进制数替换每一行的第一个十进制数而不影响其他单词

时间:2016-03-30 20:59:12

标签: regex perl

我正在尝试将每行的第一个十进制单词转换为二进制,而不会影响任何其他单词。

我的代码如下:

use strict;

use warnings;

open (tf, "dec.txt");
open (out1, " > bin.txt");
while (my $line = <tf>){
    my $binary_number = sprintf("%03b", $line); 
    print out1 " $binary_number\n";
}
close (tf);

输入文件示例:

3 4 5 
6 7 2
1 2 3

预期输出:

011 4 5
110 7 2
001 2 3
来自代码的

o / p:

011
110
001

是否有任何建议按预期输出实现o / p文件?我在这里缺少其他单词。那些我想打印的单词。

还有另一个问题: 有没有办法读取单个列(不是行)?

例如在上面的o / p第1栏......

0
1
0

4 个答案:

答案 0 :(得分:2)

perl -pe 's/^(\d+)/sprintf("%03b",$1)/e' inputfile.txt

s///e将作为Perl代码执行替换,并将匹配替换为结果,其余部分保持不变。

perl -pe 's/^(\d).*/$1/' inputfile.txt

表示第一个字符,但有更简单的非正则表达方式:

cut -c1 inputfile.txt

答案 1 :(得分:1)

使用<?php $queryid = isset($_GET['id']) ? $_GET['id'] : ''; ?> <form action="reply.php?id=<?php echo htmlspecialchars($queryid); ?>" method="POST" class="form-horizontal" role="form"> (自动分割模式)拆分空格,但只修改转换后的第一列,并打印其他列不变:

-a

输出:

$ perl -wane '$F[0] = sprintf("%03b", $F[0]); print "@F\n";' input.txt

答案 2 :(得分:0)

you can split to get the first column and use sprintf to convert decimal  to binary number

use lexical filehandle so that u can avoid closing the filehandle. 

select is used to write the content to a new file.

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

open my $fh, '<',"num.txt" || die "$!";
open my $wh , '>',"op.txt" || die "$!";
select ($wh);
while (my $line = <$fh>)
{
   chomp($line);
   my @aRR = split (/\s/,$line);
   my $bin = sprintf("%03b",$aRR[0]);
   print $bin," ",$aRR[1]," ", $aRR[2],"\n";
}

答案 3 :(得分:-1)

您可以使用regex anchors来实现您的目标。像^\d这样的正则表达式会匹配一行开头的单个数字。

如果您需要支持多位数字(例如15或123),您可以添加重复运算符:^\d+将匹配行开头的任何多位数字。