как вырезать последние 3 поля из строки и вывести общее количество токенов

Неплохая привычка явно указывать, что что-то находится в текущем каталоге,особенно когда это что-то является сценарием или программой (, альтернативой в этом случае может быть .в вашем $PATH, что обычно считается угрозой безопасности).

Бывают ситуации, когда у вас будет ./в начале имени пути, независимо от того, хотите вы этого или нет. Например, пути, найденные с помощью findпри поиске от .вниз, всегда будут иметь префикс ./.

В других ситуациях имя файла может мешать параметрам утилиты, например, при попытке удалить файл с именем -fс помощью

rm -f

Использование

rm./-f

решит, что (./-fне будет рассматриваться как вариант rm), как и

rm -- -f

do (--сигнализирует об окончании любых опций командной строки ).

Также обратите внимание, что шаблоны оболочки, такие как *, могут расширяться до файлов с начальным дефисом. Поэтому безопаснее, например,. цикл по ./*, чем по *(, если вы не используете --для разграничения неизвестного имени файла от опций, заданных утилитам ).

Поэтому рекомендуется использовать ./в именах путей, особенно если имя пути хранится в переменной и исходит из какого-то источника, внешнего по отношению к сценарию.

0
11.05.2020, 13:52
1 ответ

В качестве разделителей полей можно использовать запятые и пробелы:

awk -F "[, ]" '{print $(NF-2),$(NF-1),$NF}' file

Чтобы также написать окончательный оператор tokens:

awk -F "[, ]" '{print $(NF-2),$(NF-1),$NF;i++}END{print "Number of tokens are: " i*3}' file
3
28.04.2021, 23:15

Теги

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