각 행을 한 번에 하나씩 살펴보고 날짜인 세 번째 열을 얻는 코드가 있습니다.
형식으로 날짜를 표시합니다 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
프로그램이 자동 파일별 줄 카운터를 평가하여 해당 줄만 선택하도록 할 수 있습니다.FNR
awk
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 .....)