с awk, и угадать, что вы хотите
файл ul.awk (отредактирован)
/JOURNEY/ { jn=substr($1,2,1) ; x=substr($1,10,1) ; y=substr($1,13) ;
printf "JOURNEY_%02d%s; %02d TO %02d\n",jn,substr(" ",1,31),x,y ;
next ; }
{print ;}
, а затем запустить
awk -f ul.awk u
JOURNEY_01 ; 00 TO 01
.BYTE 00, 00, 00
JOURNEY_02 ; 00 TO 02
.BYTE 00, 01, 00
JOURNEY_03 ; 01 TO 00
.BYTE 00, 01, 01
Это несколько плохое кодирование, поскольку я предполагал, что число всегда будет 1 цифра.
Вы можете сделать....
while read line
do line=${line%%[!0-9]*}
[ -n "$line" ] || continue
: work w/ digits at line's head
done
Альтернативно - и, возможно, быстрее - вы можете сделать:
tr -cs 0-9\\n \ |
while IFS=\ read num na
do ${num:+":"} continue
: work w/ first seq of digits on line
done
Или, если вы хотите полностью игнорировать любую строку, содержащую что-либо, кроме пробелов, табуляций или чисел, или даже любую строку, содержащую два разделенных пробелами числа....
b=${IFS%?}
grep "^[$b]*[0-9]\{1,\}[$b]*$" |
while read num; do : stuff with "$num"; done
С помощью case
вы можете сделать так:
while read num
do case ${num:--} in
*[!0-9]*) continue;;esac
: something w/ $num
done