我有这个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
答案 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 "