Como extrair o ano da data (mm / dd / aaaa)

1

Como posso extrair o ano a partir de uma data no formato mm / dd / aaaa?

Eu tenho um arquivo de texto com as seguintes datas:

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

Como posso usar o sed para extrair apenas o ano de cada uma dessas datas?

    
por user455555009 23.04.2017 / 22:51

6 respostas

3

Experimente sed , assim:

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

que leria o arquivo chamado file e gravaria os resultados no novo arquivo newfile (substitua conforme necessário).

Se você deseja coletar os anos, você pode fazer algo como

cat file | sed 's/[0-1][0-9]\/[0-3][0-9]\/\([12][0-9][0-9][0-9]\)//g' | tr ' ' \n | grep . | sort -nu
    
por 23.04.2017 / 23:05
3
echo "01/01/2001 05/16/1970 06/08/2010" > datefile
sed 's:[0-1][0-9]/[0-3][0-9]/::g' datefile

Resultado: 2001 1970 2010

Isso funcionará quando todas as datas estiverem em uma linha e quando cada data estiver em sua própria linha. O separador é o : para auxiliar a inteligibilidade. A opção global g faz todas as substituições válidas.

    
por 24.04.2017 / 18:35
2

Para o seu arquivo de exemplo, você poderia simplesmente

cut -d / -f3 file

Se você quiser fazer um loop sobre essas datas, envie para um loop:

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

ou use apenas read e divida em um valor IFS personalizado;

while IFS=/ read -r mm dd yyyy; do
    : do something with "$yyyy"
done <file
    
por 25.04.2017 / 07:52
1

Como as datas estão no formato "MM / DD / AAAA" dos EUA, pode-se usar o GNU date diretamente no arquivo dates contendo as datas:

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

Você pode fazer uma formatação mais sofisticada, como

$ 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

As seqüências de formatação ( %Y e similares) são descritas no manual GNU date .

Os formatos de entrada manipulados pelo GNU date são descritos em os núcleutils do GNU manual .

    
por 26.04.2017 / 11:42
0

com awk :

awk -F'/' '{print $3}' textfile
    
por 25.04.2017 / 08:52
0
sed -e 's|.*/||' input_file

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

Usando grep com PCRE support, isso pode ser feito como mostrado quando há uma ou mais strings de tipo de data por linha no seu input_file.

    
por 25.04.2017 / 09:28

Tags