Может ли кто-нибудь объяснить мне этот небольшой скрипт.awk и запятая точка с запятой (;) в назначенном поле
echo -e "\"aa;bb\";cc ;\"dd ;ee\";
ff" | awk -v RS=\" -v ORS=\" 'NR%2==0{gsub(";",",")}
{print}'
В этом сценарии полей, разделенных (;
), но если есть один или несколько (;)
в любом поле, то это поле окружено ""
.Это-х CSV-file
.
Поэтому для дальнейшего разбора необходимо заменить все (;)
на это fields
.
Извините, но я не могу понять, почему * «Для второго содержимого записи будет aa; bb, NR% 2 == 0 будет true и заменит точку с запятой.» * И * «Для третьего содержимого записи будет: cc ; NR% 2 == 0 будет ложным, и оно будет напечатано. "* Означает" TRUE "и" FALSE "соответственно. – Andry
@Andry: Каждая двойная кавычка разделяет каждую запись, а переменная 'NR' означает количество прочитанных записей. Итак, '2% 2 == 0' истинно, а' 3% 2 == 0' - false. – Birei
Спасибо, друг. Теперь я все понимаю. – Andry