Если разделителем всегда является один символ (поэтому два или более последовательных разделителя обозначают пустые поля), вы можете указать
только первую строку из входного файла, посчитать разделители ( 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
Я проведу несколько тестов позже, если у меня будет время, но с огромным вкладом я думаю, что это решение должно быть быстрее, чем другие решения, использующие регулярное выражение, поскольку оно минимально обрабатывает первая строка, чтобы получить нет. полей, а затем использует разрез
, который оптимизирован для этой работы.
Solución rápidaAwk
:
awk '{ sum += $1; print sum/NR }' file