Намного проще использовать 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