Как добавить строку в каждую ячейку (с помощью awk )?

Сzsh:

typeset -A seen=()
for f (*.log*(nOn)) {((seen[${f%%.*}]++)) && echo rm -f -- $f}

(удалите echo, если результат вас устраивает.

*.log*(nOn)перечисляет файлы *.log*численно в обратном порядке (, где f.logсортируется после самого f.log.0после самого f.log.9послеf.log.10).

typeset -A seen=()объявляет ассоциативный массив $seen. Мы rmфайл, если часть перед первой.(${f%%.*})была просмотрена ранее.

С любой оболочкой и утилитами GNU

printf '%s\0' *.log* |
  sort -rzV |
  gawk -v RS='\0' -v ORS='\0' -F. 'seen[$1]++' |
  xargs -r0 echo rm -f --

POSIXly или с помощью утилит busybox

Но при условии, что имена файлов не содержат пробелов, кавычек или обратной косой черты:

printf '%s\n' *.log* |
  sort -rt. -k1,1 -k3,3rn |
  awk -F. 'seen[$1]++' |
  xargs echo rm -f --

Все они предполагают, что часть имени файла до .logне содержит точек.

-2
27.06.2021, 01:10
3 ответа

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

$ cal | awk '{ gsub(/[^ ] |   /, "& ") }1'

или используяsed:

$ cal | sed -E 's/[^ ] |   /& /g'
      June  2021
Su  Mo  Tu  We  Th  Fr  Sa
         1   2   3   4   5
 6   7   8   9  10  11  12
13  14  15  16  17  18  19
20  21  22  23  24  25  26
27  28  29  30
4
28.07.2021, 11:22

Это может быть то, что вы пытаетесь сделать:

$ cal | awk 'NR>1{gsub(/.../,"& ")}1'
      June 2021
Su  Mo  Tu  We  Th  Fr  Sa
         1   2   3   4   5
 6   7   8   9  10  11  12
13  14  15  16  17  18  19
20  21  22  23  24  25  26
27  28  29  30

Обратите внимание, что он не будет добавлять пробел в «ячейку» в конце каждой строки, а также не будет добавлять дополнительный пробел после «ячейки» в строке месяц+год.

6
28.07.2021, 11:22

GNU awk

cal | cat | gawk -v FIELDWIDTHS="3 3 3 3 3 3 2" 'NR > 1 {$1 = $1} 1'
1
28.07.2021, 11:22

Теги

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