Как пропустить запись с awk

У меня есть большое количество файлов в каталоге журнала, к именам которого добавили метку времени (в этом случае с date +%b[...]).

Я хочу записать POSIX совместимую остроту, которая будет:

также

  • пропустите вывод строк от ls -ltc это имеет 2 поля или меньше (как замечено awk) и не содержите regexp константу /Jul/

или

  • пропустите первую строку, произведенную ls -ltc и любая строка, не соответствующая /Jul/.

Результатом является то же для моей цели как, только первая строка состоит из двух полей (как замечено awk).

Я попробовал:

> ll -tc | rm $(awk --posix 'NF > 2 && !/Jul/ {print $NF;}')
> ll -tc | rm $(awk --posix 'NF > 2 !/Jul/ {print $NF;}')

У обоих есть неверный синтаксис, потому что условие на NF, по-видимому, не сосуществует приятно с regexp соответствие условию путь ls | awk '/foo/ && /bar/'был бы, например.

Сурьма может дать мне подсказки по тому, как к любому пропуску какая-либо произвольная запись и/или применяет арифметическое условие на NF и regexp сопоставление с образцом одновременно? Я озирался, но не мог найти зарегистрированный синтаксис, который я ищу...

3
задан 7 July 2015 в 09:41

2 ответа

Или

awk 'NF<=2 || /Jul/ {next} {print}'

или

awk 'NR==1 || /Jul/ {next} {print}'

или, инвертируя логику для сокращения команд, или

awk 'NF>2 && !/Jul/ {print}'

или

awk 'NR!=1 && !/Jul/ {print}'
~$ cat input
first line
Gen second third
Feb second third
Mar second third
Apr second third
May second third
Jun second third
Jul second third
Aug second third
Sep second third
Oct second third
Nov second third
Dec second third
~$ awk 'NF<=2 || /Jul/ {next} {print}' input
Gen second third
Feb second third
Mar second third
Apr second third
May second third
Jun second third
Aug second third
Sep second third
Oct second third
Nov second third
Dec second third
~$ awk 'NR==1 || /Jul/ {next} {print}' input
Gen second third
Feb second third
Mar second third
Apr second third
May second third
Jun second third
Aug second third
Sep second third
Oct second third
Nov second third
Dec second third
2
ответ дан 1 December 2019 в 16:27

@Kos дал абсолютно корректный ответ на Ваш вопрос.

, Но я думаю, что Вы пытаетесь решить проблему, которая не является проблемой. Для удаления файлов, которые соответствуют определенным критериям необходимо использовать find с параметром -delete.

, например:

find . -type f -newermt 2015-07-07  ! -newermt 2015-07-08 -delete
find . -type f -newerat 2015-07-07  ! -newerat 2015-07-08 -delete
1
ответ дан 1 December 2019 в 16:27

Другие вопросы по тегам:

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