Как я могу написать сценарий sed (или awk, просто не знакомый с ним), чтобы указать запятые на внутренности двоичного кода csv? Я могу удалить одну запятую, используя следующий sed-вкладыш sed:
sed 's/"\([^"]*\),\([^"]*\)"/\1\2/g' file > file2
Но если у меня есть две запятые в поле, у меня есть только одна запятая:
"АЛОХА, ИНК., АССОЦИАЦИЯ КОНДОМИНИИ"
становится
"АЛОХА, ИНК. АССОЦИАЦИЯ КОНДОМИНИИ"
В качестве альтернативы, если кто-то может объяснить мне, почему я не могу заставить опцию "ДОПОЛНИТЕЛЬНО ЗАВЕРШЕНА" использовать при загрузке csv в mysql, это сделало бы жизнь намного проще (я пытался используйте sed, чтобы запятнать запятые, потому что запятые уничтожают мои столбчатые данные, даже когда я использую опционально закрытую опцию, а мои поля заключаются в двойные кавычки. Экспорт Excel с кавычками только вокруг полей запятыми. Если все двойное кавычки, у меня нет проблема, но с выборочно-цитируемым я начинаю стучать ботинок на стол.
Обновление: файл содержит несколько полей.
"АЛОХА, ИНК., АССОЦИАЦИЯ КОНДОМИНИИ", 900, ВЕНЕЦИЯ, ФЛ, 34293-5112, ВЕНЕЦИЯ, ФЛ, 34285, АЛОХА
Я даже обеспокоен тем, что могут быть строки с несколькими полями с кавычками, которые, похоже, могут быть серьезной проблемой. Насколько я могу сказать, это не так уж и распространено.
Одна вещь, о которой я только думал, - это исключить все случаи "INC", но это не устранит другие примеры, такие как ", LLC" и т.д.
Я хочу удалить все запятые из поля.
Я беспокоюсь о таких случаях, как:
"ALOHA, INC., АССОЦИАЦИЯ КОНДОМИНИИ", 900, ВЕНЕЦИЯ, FL, 34293-5112, ВЕНЕЦИЯ, FL, 34285, "ALOHA, Inc., АССОЦИАЦИЯ КОНДОМИНИИ"
Разве не будут устранены запятые между первым экземпляром Алохи и последней инстанцией
sed 's/"\([^"]*\),\([^"]*\)"/\1\2/g' file > file2
Вы можете использовать GNU awk для этого случая
$ gawk -v FPAT='"[^"]*"|[^,]*' -v OFS=, '{for(i=1; i<=NF; i++) gsub(/,/, "", $i)} 1' ip.txt
"ALOHA INC. A CONDOMINIUM ASSOCIATION", 900, VENICE, FL, 34293-5112,,VENICE,FL,34285,"ALOHA Inc. A CONDOMINIUM ASSOCIATION"
-v FPAT='"[^"]*"|[^,]*'
определяют поле ввода как поля с двойными кавычками или разделенные запятой -v OFS=,
запятая в качестве разделителя выходного поляfor(i=1; i<=NF; i++)
петля над всеми полями ввода gsub(/,/, "", $i)
удалить все запятые1
печатать содержимое $0
Если gawk
недоступен, вы можете использовать
perl -pe 's/"[^"]+"/$&=~tr|,||dr/ge' ip.txt
Примечание. Это не будет работать, если поле содержит двойную кавычку, новую строку и т.д. Использование парсеров csv
доступных в perl
, python
и т.д.
Если вы хотите удалить все вхождения запятых между "
to "
то следующее может вам помочь.
sed '/".*"/s/,//g' Input_file
Используйте параметр sed -i
если вы хотите сохранить вывод в самом файле Input_file.