我使用bash脚本,我有一个位置文件:
ID(10c) NAME(10c) CITY(10c)
ID(10c) NAME(10c) CITY(10c)
例如,如果我有
123456 TOTO
123457 PARIS
我想要这个输出:
123406 TOTO XXXXX
123407 XXXXX PARIS
我需要实现这个algorythm:
我尝试过:
awk 'BEGIN {FIELDWIDTHS="10 10 10"}{$ID = $1;$NAME = $2;$CITY = $3;$ID = substr($ID,1,4)0substr($ID,6);if ($NAME ~ /^\s*$/) $NAME = "XXXXX ";if ($CITY ~ /^\s*$/) $CITY = "XXXXX ";PRINT $ID$NAME$CITY}1' $FILEINPUT >> $FILEINPUT.tmp
答案 0 :(得分:2)
使用awk
,您可以说:
awk 'BEGIN {FIELDWIDTHS="10 10 10"}{if ($2 ~ /^\s*$/) $2 = "XXXXX "; if ($3 ~ /^\s*$/) $3 = "XXXXX "}1' inputfile
为了您的输入,它会产生:
123456 TOTO XXXXX
123457 XXXXX PARIS
编辑:根据您的意见,您可以说:
awk 'BEGIN {FIELDWIDTHS="10 10 10"}{if ($2 ~ /^\s*$/) $2 = "XXXXX "; if ($3 ~ /^\s*$/) $3 = "XXXXX "; $1=substr($1,1,4)0substr($1,6)}1' OFS='' inputfile
获得理想的结果。
答案 1 :(得分:0)
将行拆分为固定宽度字段并检查字段是否为空
while read ligne
do
ID=$(echo $ligne | cut -c 1-10)
NAME=$(echo $ligne | cut -c 12-21)
CITY=$(echo $ligne | cut -c 23-33)
if [ "$(echo $NAME | tr -d ' ')" == '' ]; then
# replace NAME
NAME="xxxxxx"
fi
done