Глядя на ваш пример ввода, кажется, что строка формата на самом деле "%5d%-5s%5s%5d%8.3f%.3f%8.3f"
с первым полем строки, выровненным по левому краю.Жаль, что у awk нет функции scanf()
, но вы можете получить данные с помощью нескольких substr()
вызовов
awk -v OFS=: '
{
a=substr($0,1,5)
b=substr($0,6,5)
c=substr($0,11,5)
d=substr($0,16,5)
e=substr($0,21,8)
f=substr($0,29,8)
g=substr($0,37,8)
print a,b,c,d,e,f,g
}
'
выходов
1:PS1 : A1: 1: 11.197: 5.497: 7.783
1:PS1 : A1: 1: 11.189: 5.846: 7.700
Если у вас есть GNUawk, вы можете использовать переменную FIELDWIDTHS
следующим образом:
gawk -v FIELDWIDTHS="5 5 5 5 8 8 8" -v OFS=: '{print $1, $2, $3, $4, $5, $6, $7}'
также выводит
1:PS1 : A1: 1: 11.197: 5.497: 7.783
1:PS1 : A1: 1: 11.189: 5.846: 7.700