2015-11-29 4 views
0

У меня есть вход csv, который имеет ограничение по каналу, что я хочу выбрать несколько столбцов, а затем сохранить в виде файла с разделителями-запятыми.Использование cut to Convert Pipe-Delimited для Comma-Delimited

Используя приведенный ниже код я могу читать входной файл CSV и сохранить выбранные столбцы как новый файл CSV, но это еще труба разделителей:

cut -d "|" -f1-2,15,28-31,35 <input_file.csv> output_file.csv

, когда я пытаюсь использовать output-delimiter вариант I получить недопустимую ошибку опции.

Я пробовал:

cut -d "|" -f1-2,15,28-31,35 --output-delimiter="," <input_file.csv> output_file.cv

и

cut -d "|" -f1-2,15,28-31,35 <input_file.csv> output_file.csv --output-delimiter=","

cut: illegal option -- - usage: cut -b list [-n] [file ...] cut -c list [file ...] cut -f list [-s] [-d delim] [file ...]

+1

Почему вы не переводите? 'tr '|' '. – 4ae1e1

+0

@ 4ae1e1 Потому что я не знаю, что это такое. –

+2

Затем перейдите к 'man tr'. – 4ae1e1

ответ

2

cut Мой не понимает --output-delimiter директивы. Вы уверены, что у вас есть версия cut?

Одна идея состоит в том, чтобы сначала перевести | в ,, а затем вырезать, что:

tr '|' ',' < input_file.csv | cut -d ',' -f1-2,15,28-31,35 > output_file.csv 

Другим вариантом было бы awk, который понимает различные разделители полей для ввода и вывода:

awk 'BEGIN {FS="|"; OFS=","} 
      {print $1, $2, $15, $28, $29, $30, $31, $35}' \ 
    <input_file.csv>output_file.csv 

Приветствий

+0

Спасибо @ chw21 оба варианта работали отлично. Приветствует! –