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

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

Как извлечь год из даты в формате мм/дд/гггг?

У меня есть текстовый файл, содержащий следующие даты:

01/01/2001
05/16/1970
06/08/2010

Как использовать sed, чтобы извлечь только год из каждой из этих дат?

решение1

Попробуйте 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

решение2

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

Поскольку даты указаны в американском формате «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и т.п.) описаны в dateруководстве GNU.

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

решение4

С awk:

awk -F'/' '{print $3}' textfile

Связанный контент