Есть ли способ указать wvdial ждать ответа на команду?

Эта команда GNU awk делает свое дело:

awk -F ',' 'NR==1{h=$0; next};!seen[$1]++{f=$1".csv"; print h > f};{f=$1".csv"; print >> f; close(f)}' input.csv

Предостережение: это не сработает, если в первом поле есть экранированные запятые. Запятые в других полях должны работать нормально.

] Объяснение:

  • -F ',' (разделитель полей) гарантирует, что $ 1 и т. Д. Относятся к столбцам CSV, а не к значениям, разделенным пробелами.
  • NR == 1 {h = $ 0; next} специально обрабатывает первую строку ( NR == 1 ), сохраняя полную строку заголовка в переменной h ( h = $ 0 ]) и пропуск строки ( next ).
  • ! seen [$ 1] ++ {f = $ 1 ".csv"; print h> f} обрабатывает первое вхождение любого $ 1 специально (! Замечено [$ 1] ), сохраняя $ 1 , за которым следует .cs v в переменную имени файла f и сохранение заголовка в этот файл ( напечатайте h> f ).
  • {f = $ 1 ".csv"; print >> f; close (f)} добавляет текущую строку в файл ( print >> f ) и закрывает файловый дескриптор ( close (f) ), чтобы не хранить его один раз выполняется обработка всех строк с определенным идентификатором.

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

3
29.03.2016, 20:47
0 ответов

Теги

Похожие вопросы