Если в качестве разделителя всегда используется один символ (поэтому два или более последовательных разделителей обозначают пустые поля), вы можете head
просто указать первую строку в вашем входном файле, сосчитать разделители ( n
разделители означают количество полей n+1
), а затем использовать cut
для печати из 1
поля st. до n
поля th (от второго до последнего), например, с вводом, разделенным табуляцией:
n=$(head -n 1 infile | tr -dc \\t | tr \\t \\n | wc -l)
cut -f1-$n infile > outfile
или, например, с помощью файла CSV :
n=$(head -n 1 infile | tr -dc , | tr , \\n | wc -l)
cut -d, -f1-$n infile > outfile
Я проведу несколько тестов позже, если у меня будет время, но с огромным вкладом я думаю, что это решение должно быть быстрее, чем другие решения, использующие регулярное выражение, так как это делает минимальную обработку в первой строке, чтобы получить нет. полей, а затем использует cut
который оптимизирован для этой работы.