打印时如何在bash中获得良好的输出?

时间:2014-09-23 01:55:39

标签: regex

我在这里有这个命令,我在实现良好的格式时遇到了问题。

在这一行中,

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"

1 个答案:

答案 0 :(得分: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] "\""
}