So extrahieren Sie das Jahr aus dem Datum (mm/tt/jjjj)

So extrahieren Sie das Jahr aus dem Datum (mm/tt/jjjj)

Wie kann ich aus einem Datum im Format tt/mm/jjjj das Jahr extrahieren?

Ich habe eine Textdatei mit den folgenden Daten:

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

Wie kann ich sed verwenden, um aus jedem dieser Daten nur das Jahr zu extrahieren?

Antwort1

Versuchen Sie sedes wie folgt:

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

Dadurch wird Ihre aufgerufene Datei gelesen fileund die Ergebnisse in die neue Datei geschrieben newfile(nach Bedarf ersetzen).

Wenn Sie die Jahre sammeln möchten, könnten Sie so etwas tun wie

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

Antwort2

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

Ergebnis:2001 1970 2010

Dies funktioniert sowohl, wenn alle Daten in einer Zeile stehen, als auch, wenn jedes Datum in einer eigenen Zeile steht. Das Trennzeichen dient der :besseren Verständlichkeit. Die globale gOption nimmt alle gültigen Ersetzungen vor.

Antwort3

Da die Daten im US-amerikanischen Format „MM/TT/JJJJ“ vorliegen, kann GNU datedirekt auf die Datei angewendet werden dates, die die Daten enthält:

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

Sie können eine ausgefallenere Formatierung vornehmen, wie

$ 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

Die Formatierungssequenzen ( %Yund dergleichen) sind im GNU- dateHandbuch beschrieben.

Die von GNU verarbeiteten Eingabeformate datesind beschrieben indas GNU Coreutils-Handbuch.

Antwort4

Mit awk:

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

verwandte Informationen