2015-06-22 85 views
-5

当我直接使用下面的命令时,它的工作正常,但是当我试图把它放在perl脚本中时,它给出了很多错误。Perl:显示perl变量awk sed echo

my $calculate = `echo "$value" | awk -F "SP=" '{print $2}' | awk -F ";" '{print $1}' | awk -F ":" '{print $2}' | sed 's/\,/\//g'`; 

数据是这样的:

HM=Happy:man,1;SP=SAD:person,3;AP=Arrogant:personality,5;MD=Mad:Dynamic,9;PR=Power:raper,10; 

我想输出

person/3 
+0

为什么不这样做纯粹的Perl?无论如何,这可能会更容易。 – Biffen

+0

感谢您的回复...请指教我如何在纯粹的perl .. –

+0

向我们展示一些示例输入和预期输出。机会是可以用一个单一的正则表达式来完成。 – Biffen

回答

0

你可以做到这一点使用Perl的正则表达式模式

my $calculate; 
($calculate = $1) =~ tr~,~/~ if $value =~ /SP=[^:]*:([^;]*)/; 
+0

感谢您的回应...我得到的语法错误:语法错误在file.pl第7行,在“tr〜,〜/〜r”附近 –

+0

您有一个不支持'/ r '修饰符。立即试用 – Borodin

+0

感谢您的支持!这是完美的 !!! –

0

这样的事情,也许:

#!/usr/bin/env perl 

use strict; 
use warnings; 
use v5.20; 

my $data 
    = 'HM=Happy:man,1;SP=SAD:person,3;AP=Arrogant:personality,5;MD=Mad:Dynamic,9;PR=Power:raper,10;'; 

my %hash = map {m/(.*?)=(.*)$/} split(';', $data); 

if ($hash{'SP'} =~ m/:(\w+),(\d+)$/) { 
    my $result = $1 . '/' . $2; 
    say $result; 
} 
person/3 
+0

感谢您的回复。上面的代码给出了$ result的空白值。 –

+0

对不起,它看起来像它不在这个循环---> if($ hash {'SP'} =〜m /:(\ w +),(\ d +)$ /){ –

+0

对我来说工作正常;它输入if语句(它不是循环,BTW)并打印'person/3'。 – Biffen