Как разделить столбцы, если в поля включен разделитель

Решением этой проблемы было удаление блоков резервного хранилища и лун (, оставив цели на месте ). Затем я перестроил блоки в targetcli, чтобы они указывали на правильные местоположения /dev/sd *.

В будущем мы перенесем все это с помощью /dev/disk/by -partuuid, чтобы сопоставить резервные хранилища с блочными устройствами, что должно решить проблему сохраняемости.

1
28.12.2020, 17:25
2 ответа

Если ваши требования

  1. Все ваши данные заключены в двойные кавычки, как показано в примере
  2. Вы не заинтересованы в первом и последнем полях (или готовы проделать дополнительную работу для их обработки.

тогда вы можете рассматривать разделитель как последовательность из трех символов ",".

awk -F '","' '$9>200 {print}' file.csv

({print}не нужен, я вставил его для ясности, чтобы указать, куда добавить дополнительный код ).

Изменить :расширенный пример, вывести 3 столбца в том же формате, если девятый больше 200.

awk -F '","' 'BEGIN {OFS=FS}$9>200{print "\""$3,$8,$9"\""}'

Измените разделитель на |и выполните сортировку в числовом порядке.

awk -F '","' 'BEGIN {OFS="|"}$9>200{print $3,$8,$9}' | sort -d'|'-n -k3
2
18.03.2021, 23:03

Возможно, вы захотите использовать инструмент, который знает, как анализировать файлы CSV. Например, у Миллера:

mlr -N --csv filter '$9 > 200' < your-file

В GNU awkвы можете установить FPATдля определения полей на основе шаблонов, которым они соответствуют, а не разделителя, который их ограничивает:

gawk -v 'FPAT=[^",]*|"([^"]|"")*"' 'substr($9,2) > 200'

Здесь также обработка "экранирована как "", но при условии, что значения полей не содержат символов новой строки и что 9 поле всегда заключено в кавычки.

5
18.03.2021, 23:03

Теги

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