Как извлечь год из даты (мм / дд / гггг)

Одним из возможных решений является просмотр выходных данных pstree. При запуске внутри оболочки, созданной из vi, часть дерева, в которой перечислены pstree, должна показать вам, насколько глубоко вы находитесь. Например:

$ pstree <my-user-ID>
...
       ├─gnome-terminal-─┬─bash───vi───sh───vi───sh───pstree
...
1
25.04.2017, 08:49
6 ответов

Для вашего примера файла вы можете просто

cut -d / -f3 file

Если вы хотите перебрать эти даты, переведите их в цикл:

cut -d / -f3 file |
while read year; do ...

или просто используйте , прочтите и разделите на пользовательском значении IFS ;

while IFS=/ read -r mm dd yyyy; do
    : do something with "$yyyy"
done <file
2
27.01.2020, 23:12

С awk :

awk -F'/' '{print $3}' textfile
0
27.01.2020, 23:12

Поскольку даты представлены в американском формате "MM/DD/YYYY", можно использовать GNU date непосредственно на файле dates, содержащем даты:

$ date -f dates "+%Y"
2001
1970
2010

Можно выполнить более сложное форматирование, например

$ date -f dates "+%F is in %Y and is a %A"
2001-01-01 is in 2001 and is a Monday
1970-05-16 is in 1970 and is a Saturday
2010-06-08 is in 2010 and is a Tuesday

Последовательности форматирования (%Y и т.п.) описаны в руководстве GNU date.

Форматы ввода, обрабатываемые GNU date, описаны в руководстве GNU coreutils.

2
27.01.2020, 23:12

Попробуйте sed, например:

cat file | sed 's/[0-1][0-9]\/[0-3][0-9]\/\([12][0-9][0-9][0-9]\)/\1/g' > newfile

, который прочитает ваш файл с именем file и запишет результаты в новый файл newfile (при необходимости замените ).

Если вы хотите собрать количество лет, вы можете сделать что-то вроде

cat file | sed 's/[0-1][0-9]\/[0-3][0-9]\/\([12][0-9][0-9][0-9]\)/\1/g' | tr ' ' \\n | grep . | sort -nu
3
27.01.2020, 23:12
sed -e 's|.*/||' input_file

grep -oP '(?:^|\h)(?:\d\d?/){2}\K\d{4}(?=\h|$)' input_file

Используя grep с поддержкой PCRE, это можно сделать, как показано, когда в вашем файле input_file есть одна или несколько строк типа даты на строку.

0
27.01.2020, 23:12
echo "01/01/2001 05/16/1970 06/08/2010" > datefile
sed 's:[0-1][0-9]/[0-3][0-9]/::g' datefile

Результат:2001 1970 2010

Это будет работать, когда все даты находятся в одной строке, и когда каждая дата находится в отдельной строке. Разделителем является :для облегчения разборчивости. Глобальная опция gделает все допустимые замены.

3
27.01.2020, 23:12

Теги

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