Набагато простіший спосіб - це використовувати 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
друкує результат.
Використовуйте перенаправлення оболонки ( >
), щоб надіслати вихід у новий файл:
awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv > output.csv