2014-09-23 73 views
0

我有这个命令在这里,我有一个问题,实现一个很好的格式。打印时如何在bash中获得良好的输出?

在该线,

DATE*2014*09*23 
VAL*0001*ABC 
N3*Sample 
VAL*0002*XYZ 

我期望这里输出是这样的:

["ABC", "XYC"] 

我尝试这样做的代码:

perl -nle 'print $& if /VAL\*[0-9]*\*\K.*/' file | awk '{ printf "\"%s\",", $0 }' 

所得只:

"ABC","XYZ", 

另一件事是当只打印一个值时。

如果发生这样的文件是这样的:

DATE*2014*09*23 
VAL*0001*ABC 
N3*Sample 

我所需的输出就只能是这样的(忽略其[]的输出):

"ABC" 

回答

0

你可以做一切用awk:

#!/usr/bin/awk -f 

BEGIN {FS="*"; i=0; ORS=""} 
$1=="VAL" {a[i++]=$3} 

END { 
    if (i>1) { 
     print "[\"" a[0] 
     for (j = 1; j < i; j++) 
      print "\",\"" a[j] 
     print "\"]" 
    } 
    if (i==1) 
     print "\"" a[0] "\"" 
}