Как можно извлечь год из даты в выводе команды, которая показывает содержимое архива в консоли?

Как внести изменения в следующий запрос, чтобы он извлекал только год из полной даты, возвращаемой командой `tar -tvf acts.tar`, вместо использования `index($4, ":")`? Предоставленный запрос выглядит так: 

<pre><code class="bash">tar -tvf acts.tar | nawk -v yearNOW=$(date +%Y) '{year= (index($4, ":")) ? yearNOW : $4; arr[year] += $3} END {for (i in arr) printf("%s -&gt; [%d]\n", i, arr[i])}'</code></pre> 

Причем вывод команды `tar -tvf acts.tar` выглядит следующим образом: 

<b>-rw-r--r-- dmitriy/dmitriy  9844 2023-06-16 19:33 acts/actFirst_53632_1102.htm</b> 

Нужно, чтобы в место указания года использовалась только часть полной даты.
  • 15 ноября 2024 г. 14:53
Ответы на вопрос 2
Чтобы извлечь только год из полной даты, возвращаемой командой `tar -tvf acts.tar`, можно воспользоваться функцией подстроки в `awk`. Вместо использования `index($4, ":")`, нужно просто извлечь первые пять символов из поля с датой, так как формат даты — это `YYYY-MM-DD`.

Вот обновленный запрос:

```bash
tar -tvf acts.tar | nawk -v yearNOW=$(date +%Y) '{year = substr($4, 1, 4); arr[year] += $3} END {for (i in arr) printf("%s -> [%d]\n", i, arr[i])}'
```

В этом новом запросе:

- `substr($4, 1, 4)` извлекает первые четыре символа из поля `$4` (где находится дата), что и есть год.
- Массив `arr` заполняется по ключу `year`, что теперь будет содержать только год.

Таким образом, вывод будет содержать количество файлов в архиве, сгруппированных по годам.
string='-rw-r--r-- dmitriy/dmitriy 9844 2023-06-16 19:33 acts/actFirst_53632_1102.htm'
year=$( awk '{print substr($4,1,4)}' <<<"$string" )
Похожие вопросы