
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
書式設定順序(など)はGNUのマニュアルに記載されていますdate
。
GNU が処理する入力フォーマットについてはdate
後述する。GNU coreutils マニュアル。
答え4
そしてawk
:
awk -F'/' '{print $3}' textfile