Намного проще использовать tr
$ tr '_' ',' < input.csv | tr -d '"'
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
Это работает так, что tr
принимает два аргумента - набор символов для замены и их замену. В этом случае у нас есть только наборы из 1 символа. Мы перенаправляем поток input.csv
ввода tr
stdin через <
оператор оболочки и направляем полученный результат tr -d '"'
для удаления двойных кавычек.
Но awk
тоже могу это сделать.
$ cat input.csv
"1_1_0_0_76"
"1_1_0_0_77"
"1_1_0_0_78"
$ awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
Это немного отличается: awk читает каждый файл построчно, каждый встроенный скрипт /Pattern match/{ codeblock}/Another pattern/{code block for this pattern}
. Здесь у нас нет шаблона, поэтому он означает выполнение кодового блока для каждой строки. gsub()
Функция используется для глобальной подстановки внутри строки, поэтому мы используем ее для замены подчеркивания запятыми, а двойные кавычки - пустой строкой (эффективно удаляя символ). 1
На месте матча шаблона с отсутствующим блоком кода, который по умолчанию просто для печати линии; другими словами, кодовый блок с gsub()
выполняет работу и 1
печатает результат.
Используйте команду redirection ( >
) для отправки вывода в новый файл:
awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv > output.csv
В качестве альтернативы вы также можете использовать эту
sed
команду:источник
Perl, «швейцарская армейская бензопила» обработки текста в командной строке, также может сделать это. Синтаксис (не по совпадению) очень похож на
tr
иsed
примеры:или:
Но, честно говоря, если вы не хотите тратить время на изучение нового языка программирования (а это действительно то, что есть в awk, Perl, sed и других подобных инструментах) именно для этой основной задачи, вы также можете сделать это в любой текстовый редактор, который поддерживает поиск и замену:
Откройте файл CSV в вашем любимом текстовом редакторе (например, в gedit, kate, коврике для мыши и т. Д .; даже обычный старый блокнот или Wordpad в Windows могут это сделать).
Выберите «Поиск и замена» из меню (обычно находится в разделе «Редактировать», если отдельного меню «Поиск» не существует).
Введите
_
в поле поиска и,
в поле замены.Нажмите «Заменить все».
Повторите с
"
в поле поиска и ничего в поле замены.Сохраните файл.
Теперь, если вам нужно сделать это для 100 или 1000 файлов вместо одного, то изучение нового инструмента командной строки начинает иметь смысл. И, конечно, как только вы знаете, как использовать Perl, sed или что-то еще, вы сэкономите много времени и усилий с подобными задачами позже. Но для единовременной работы, которую вы не ожидаете делать снова, иногда простой интерактивный инструмент, такой как текстовый редактор, является самым простым решением.
источник
Вы могли бы сделать это
vim
также.Откройте файл:,
vim input.csv
затем используйтеvim
расширенный инструмент поискаs
. Введите двоеточие (:
), чтобы войти в командный режим, и выполните команды следующим образом:Практически те же команды, что и в ответе IanC, но внутри
vim
вместо использованияsed
.источник
Почему бы просто не изменить значения по умолчанию входных и выходных значений разделителя
источник