2014-09-23 75 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] "\"" 
}