по Additionally, for whatever reason, said Imperial measurements contain an excess of quotation marks.
- при записи измерений в футах и дюймах '
представляет футы, а "
представляет дюймы.Итак, 5 футов 11 дюймов написано 5' 11"
.В CSV с полями в кавычках, таких как "foo"
, вам нужно каким-то образом включить "
, и один из способов сделать это в некоторых форматах CSV (например, как экспортировано из Excel) - удвоить "
, чтобы избежать его.Таким образом, включение foo"bar
в поле в кавычках будет "foo""bar"
.Теперь давайте вернемся к 5' 11"
- применяется та же логика, и, включив ее в поле в кавычках, вы бы записали его как "5' 11"""
, где ""
перед последним "
является экранированным представлением "
для включения в указанное поле.См. Какой самый надежный способ эффективного анализа CSV с использованием awk? для ссылок на применимые "стандарты" CSV и дополнительную информацию о разборе CSV с помощью стандартного инструмента UNIX, awk.
относительно вашего конкретноговопрос - вместо того, чтобы конвертировать одно число за раз с использованием жестко закодированных значений, просто конвертируйте их все одновременно алгоритмически.Использование GNU awk для FPAT:
$ cat tst.awk
BEGIN {
FPAT = "([^,]*)|(\"[^\"]+\")"
OFS = ","
}
{
split($4,feetinches,/[^0-9]+/)
ft = feetinches[2] + (feetinches[3] / 12)
$4 = "\"" int( (10000 * ft / 3.28084) + 0.5 ) / 100 "\""
print
}
$ cat file
"Female","Hispanic",25,"5' 11"""
"Male","Scottish",54,"6' 1"""
"Female","English",12,"4' 7"""
"TBD","Martian",935,"8' 5"""
$ awk -f tst.awk file
"Female","Hispanic",25,"180.34"
"Male","Scottish",54,"185.42"
"Female","English",12,"139.70"
"TBD","Martian",935,"256.54"