Имея файл следующего содержания:
1111,2222,3333,4444
aaaa,bbbb,cccc,dddd
Я пытаюсь получить файл, равный оригиналу, но без n-го столбца, например, для n = 2 (или это может быть 3)
1111,2222,4444
aaaa,bbbb,dddd
или для n = 0 (или может быть 1)
2222,3333,4444
bbbb,cccc,dddd
Настоящий файл может быть длиной в гигабайты и содержать десятки тысяч столбцов.
Как всегда в таких случаях, я подозреваю, что волшебники командной строки могут предложить элегантное решение ... :-)
В моем реальном случае мне нужно отбросить 2 первых столбца, что можно сделать, отбросив первый столбец дважды в последовательности, но я полагаю, что было бы интереснее немного обобщить.
text-processing
Иван
источник
источник
,
? (Т.е.,
используется только как разделитель полей.),
и он никогда не встречается внутри поля.Ответы:
Я считаю, что это специально для вырезания из GNU coreutils:
Обычно вы указываете нужные поля через -f, но, добавив --complement, вы, естественно, меняете значение. Из «вырезанного человека»:
Одно предостережение: если какой-либо из столбцов содержит запятую, он отбрасывает обрезку, потому что срез не является синтаксическим анализатором CSV так же, как электронная таблица. Многие парсеры имеют разные представления о том, как обрабатывать экранированные запятые в CSV. Для простого случая CSV, в командной строке, cut по-прежнему путь.
источник
cut
потому что это не анализатор CSV. Если поле CSV имеет разделитель полей в своем значении, оно заключено в кавычки. Кстати, на предметеcut
,-f
принимает диапазоны поля.cut -f, -d3-
выведет третье поле, удалив первые два.cut -d, -f3-
Если данные просто состоят из столбцов, разделенных запятыми:
Вы также можете использовать awk, но это немного неловко, потому что очистка поля проста, удаление разделителя требует некоторой работы. Если у вас нет пустого поля, это не так уж плохо:
Если у вас есть настоящий CSV, где запятые могут появляться внутри полей, если они правильно указаны, вам нужно настоящая библиотека CSV .
источник