Якщо роздільник є завжди одним знаком (тому два чи більше послідовних роздільників позначають порожні поля), ви можете head
лише перший рядок із вхідного файлу, порахувати роздільники ( n
роздільник означає кількість полів n+1
), а потім використовувати cut
для друку з першого 1
поля до n
першого поля (друге до останнього), наприклад, із вкладеним вкладкою:
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
яке оптимізоване для цієї роботи.