Латинские символы в AWK

У меня есть вопрос о символах Latin-1 в AWK, например, ï (i с двумя точками выше (239)).

Когда я заменяю ï на i в строке, созданной в AWK (я заменяю две точки на одну), это работает:

A="Aïda"
A=gensub("ï","i","g",A)

Но, когда я делаю,

awk '
{
    $0=gensub("ï","i","g",$0)
}' \  
<(cat units.csv)

где строка "Aïda" находится в файле unit.csv, ï не заменяется, поэтому, видимо, ее нет в AWK. Вот этого я не понимаю. Я также не знаю, как увидеть, что такое AWK вместо ï.

Спасибо,

Эрик Дж.


person ericj    schedule 14.05.2013    source источник


Ответы (1)


  • awk не будет записывать изменения обратно в ваш исходный файл (ввод), вы должны выводить в файл tmp, в вашем скрипте awk вы ничего не выводили

  • часть кота не нужна просто awk '..' file

  • gensub в этом случае не требуется, gsub может подойти для вашего требования. но оба работают нормально

см. пример:

kent$  cat file
ï ï ï ï ï

kent$  awk '{$0=gensub("ï","x","g")}1' file  # (or awk '{print gensub("ï","x","g")}' file)
x x x x x

kent$  awk 'gsub("ï","x")' file                                                                                                                                             
x x x x x
person Kent    schedule 14.05.2013
comment
За исключением того, что новейший gawk (4.1) может поддерживать изменение файла на месте ( lwn.net/Articles/550212 ) - person Zsolt Botykai; 15.05.2013
comment
@ZsoltBotykai спасибо за информацию. Я использую архлинукс. и только что проверил, 4.1 еще нет в репозитории Arch .... хотел бы попробовать новую функцию, когда она появится. - person Kent; 15.05.2013
comment
Спасибо. Но в GNU Awk 4.0.1 латинская буква ï (239) не заменяется на x. - person ericj; 15.05.2013
comment
Я тестировал gawk 4.0.2, но думаю, что 401 тоже должен работать. ваша проблема с настройкой терминала? - person Kent; 15.05.2013
comment
Спасибо, я должен извиниться. Когда я экспортировал свою таблицу Excel, видимо, я не сохранил ее в utf-8. Так в файле было 239 а не 303 257. Но тогда у меня другой вопрос. Итак, у меня есть (неправильная) строка Aïda, где второй байт равен 239. Как можно проверить это в AWK, чтобы взять один или несколько байтов из строки и проверить их на соответствие одному или нескольким числам? - person ericj; 15.05.2013