루프의 변수 날짜에 연도 추가

루프의 변수 날짜에 연도 추가

각 행을 한 번에 하나씩 살펴보고 날짜인 세 번째 열을 얻는 코드가 있습니다.

형식으로 날짜를 표시합니다 04-04-2017. 각 행에는 다른 날짜가 있으며 해당 날짜로부터 5년을 새 변수에 넣기를 원 dob_want2하지만 오류 날짜가 계속 표시됩니다.

invalid date ‘'04-04-2017' -5 years’

이 파일 의 형식은 temp9_0.txt다음과 같습니다.

123 5555 04-04-2017
126 1234 25-11-2014
218 0023 13-06-2002

그리고 echo "$dob_want"출력

04-04-2017

$dob_want분명히 날짜로 인식되지 않습니다 . 이 변수를 날짜로 처리하는 방법에 대한 도움 제안이 있으면 크게 감사하겠습니다.

dob_want=$(head -1 temp9_0.txt | awk '{print $3}')
echo "$dob_want"
dob_want2=$(date  +%d-%m-%y -d "$dob_want -5 years")
echo "$dob_want2"

답변1

date귀하의 경우에 해당 유틸리티가 필요한지 잘 모르겠습니다 . 몇 년 동안 매우 간단한 작업을 수행하기를 원하기 때문입니다(5년을 yyyy빼면 dd-mm-yyyy.

이 경우 다음 awk프로그램은 입력 파일의 세 번째 열에 있는 날짜를 수정합니다.

~$ awk -v offs=-5 '{split($3,df,"-"); printf "%02d-%02d-%04d\n",df[1],df[2],df[3]+offs}' temp9_0.txt 
04-04-2012
25-11-2009
13-06-1997

as 변수로 지정된 오프셋을 offs세 번째 열의 세 번째(대시로 구분된) 하위 필드에 추가하고 수정된 하위 필드 값을 인쇄합니다 printf. 명령을 사용하여 split세 번째 열을 배열로 분할하여 -이를 수행합니다 df(날짜 필드).

모든 줄 대신 특정 줄에 적용하고 빈 줄이 없다고 가정하려면 추가 변수를 지정하고 line프로그램이 자동 파일별 줄 카운터를 평가하여 해당 줄만 선택하도록 할 수 있습니다.FNRawk

awk -v line=3 -v offs=-5 'FNR==line {split($3,df,"-"); printf "%02d-%02d-%04d",df[1],df[2],df[3]+offs}' temp9_0.txt

이 출력은 다음과 같이 명령 대체를 통해 쉘 변수로 캡처될 수 있습니다.

dob_want2=$(awk -v line=3 .....)

관련 정보