Awk没有回复我想要的东西

时间:2013-12-04 16:07:10

标签: bash shell awk

我有这个Awk:

ligne_padd=$(echo $ligne_padd | awk 'BEGIN {FIELDWIDTHS="11 105 105"}{if ($2 ~ /^\s*$/) $2 = "XXXXX"; if ($3 ~ /^\s*$/) $3 = "XXXXX"; $1=substr($1,1,7)0substr($1,9); printf "%-11s%-105s%-105s\n", $1,$2,$3}')

我有一个像这样结构的位置文件:

ID(11c),NAME(105c),CITY(105c)

我想格式化这样的字段:

ID_out = ID(1,7) + 0 + ID(9)

NAME_out = If NAME is empty or with blanks ? XXXXX

CITY_out = If CITY is empty or with blanks ? XXXXX

对于此输入:

AAAAAAAAXXXKBB BBBBB AD                                                                                             BEOGRAD 

我有这个说法:

AAAAAAA0XXXKBB BBBBB BB BEOGRAD                                                                                     XXXXX 

我想要:

 AAAAAAA0XXXKBB BBBBB AD                                                                                             BEOGRAD 

2 个答案:

答案 0 :(得分:1)

更改此正则表达式:

/^\s*$/

到此:

/^[[:space:]]*$/

由于awk / sed正则表达式引擎不支持\s\d等。

答案 1 :(得分:1)

您的代码:

BEGIN {
    FIELDWIDTHS="11 105 105"
}
{
    if ($2 ~ /^\s*$/) 
        $2 = "XXXXX"
    if ($3 ~ /^\s*$/)
        $3 = "XXXXX"
    $1=substr($1,1,7) "0" substr($1,9)
    printf "%-11s%-105s%-105s\n", $1,$2,$3
}

对我有用..也就是说,它会产生预期的输出:

AAAAAAA0XXXKBB BBBBB AD                                                                                             BEOGRAD

您的输入..

尝试用{/ p>替换printf语句

 printf "$1=\""$1"\",$2=\""$2"\",$3=\""$3"\"\n"
然后我得到:

$1="AAAAAAA0XXX",$2="KBB BBBBB AD                                                                                             ",$3="BEOGRAD "