日付から年を抽出する方法 (mm/dd/yyyy)

日付から年を抽出する方法 (mm/dd/yyyy)

mm/dd/yyyy 形式の日付から年を抽出するにはどうすればよいですか?

次の日付を含むテキスト ファイルがあります。

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

これは、すべての日付が 1 行にある場合と、各日付がそれぞれ別の行にある場合の両方で機能します。区切り文字は、:理解しやすくするためのものです。グローバルgオプションは、すべての有効な置換を行います。

答え3

日付は米国の「MM/DD/YYYY」形式なので、日付を含むdateファイルに対して GNU を直接使用することができます。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など) については、GNUdateマニュアルで説明されています。

GNUが扱う入力形式dateについては、GNU coreutils マニュアル

答え4

awk

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

関連情報