날짜에서 연도를 추출하는 방법 (mm / dd / yyyy)


1

mm / dd / yyyy 형식으로 날짜에서 연도를 추출하려면 어떻게해야합니까?

다음과 같은 날짜의 텍스트 파일이 있습니다.

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

sed를 사용하여 각 날짜에서 연도 만 추출하려면 어떻게해야합니까?

답변:


3

다음 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

4
필요가 산란 없습니다 cat만, <file sed또는 sed 's/…' file. 또한 다른 구분 기호를 사용하여 가독성을 높일 수 있습니다 /. 예를 들어 sed 's,…,…,g', 리터럴을 이스케이프 처리하지 않아도됩니다 /. 마지막으로 목적은 grep무엇입니까?
Sparhawk

@Sparhawk 예, 그렇습니다. 사용할 수는 <있지만 내 의견으로는 접근하기가 쉽지 않습니다 (여기에는 내용이 있습니다. 여기는 파이프가 있습니다> 여기가 결과입니다). 나는 좋은 코드 골퍼가 아닙니다. grep .빈 줄 이 비어 있습니다 (파일을 모르겠습니다). sed s,...매뉴얼이 다르게 말하지만 작동합니다. 그것은 습관이라고 생각합니다.
Ned64

네, 실제로 IMO는 별거 아닙니다. FWIW <file는 처음에도 갈 수 있습니다 <file sed 's…' | etc. 또한, man sed단부 (AT 섹션 갖는 SEE ALSO리드 "전체 설명서")에 info sed>를 sed scripts> The "s" Command.
Sparhawk

3
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옵션은 모든 유효한 대체를 수행합니다.


2

예제 파일의 경우 간단히

cut -d / -f3 file

해당 날짜를 반복하려면 루프로 파이프하십시오.

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

또는 read사용자 정의 IFS값을 사용 하고 분할하십시오 .

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

1
사람들이 실제로이 이상한 날짜 형식을 사용한다고 당황하지 않습니다.
tripleee

1

날짜는 미국 "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 매뉴얼에 설명되어 있습니다 .


GNU 가 대부분의 세계가 기대하는 것만 date 이해 06/08/2010하고 있다는 점에서 운이 좋았습니다 . 2010-06-082010-08-06
Stéphane Chazelas

@ StéphaneChazelas 날짜는 미국 형식이며 GNU date 는 구문 분석 방법을 알고 있습니다. 날짜가 GNU date가 구문 분석 할 수없는 다른 형식 인 경우 입력에서 간단한 재 배열이 이루어질 수 있습니다.
Kusalananda


0
sed -e 's|.*/||' input_file

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

지원 grep과 함께 사용하면 PCREinput_file에 행당 하나 이상의 날짜 유형 문자열이있을 때 표시된대로 수행 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.