파일의 날짜 형식을 변환하는 쉘 스크립트

파일의 날짜 형식을 변환하는 쉘 스크립트

쉘 스크립트를 사용하여 파일의 날짜 형식을 변환하고 싶습니다.

입력하다:

S.no|Name|Joining_Date|Address
1|asdasd|09/18/2018|asdas
2|asd|09/18/2018|asdasd
3|asdas|09/18/2018|aadadw

산출:

S.no|Name|Joining_Date|Address
1|asdasd|18/09/2018|asdas
2|asd|18/09/2018|asdasd
3|asdas|18/09/2018|aadadw

아래는 시도한 스크립트입니다.

입력 파일:
cat datesep.txt :

asdasd|asdasd|asdasd|30/08/2018|sadasd  
asdasd|asdasd|asdasd|12/09/2018|sadasd  
asdasd|asdasd|asdasd|23/06/2018|sadasd  
asdasd|asdasd|asdasd|26/10/2018|sadasd  
asdasd|asdasd|asdasd|23/09/2018|sadasd  
asdasd|asdasd|asdasd|12/07/2018|sadasd 

cattest.sh

#!/bin/bash  
date +'%d-%m-%y'  
DATE=`date +%d`  
MONTH=`date +%m`  
YEAR=`date +%y`  
echo "${MONTH}/${DATE}/${YEAR}"  

cattest1.sh

#!/bin/bash  
SOURCEDATE=`awk -F '|' '{print $4}' /home/work/datesep.txt`  
TEMP=$SOURCEDATE  
echo $TEMP  
DATE=`cut -c 1-2 ${TEMP}`  
MONTH=`cut -c 4-5 ${TEMP}`  
YEAR=`cut -c 7-10 ${TEMP}`  
echo "${MONTH}/${DATE}/${YEAR}"  

cattest2.sh

#!/bin/bash  
awk -F '|' '{print $4}' /home/work/datesep.txt > /home/work/temp.txt  
TEMP=$SOURCEDATE  
echo $TEMP  
DATE=`cut -c 1-2 /home/work/temp.txt`  
MONTH=`cut -c 4-5 /home/work/temp.txt`  
YEAR=`cut -c 7-10 /home/work/temp.txt`  
echo "${MONTH}/${DATE}/${YEAR}"  

cattest3.sh

#!/bin/bash  
awk -F '|' '{print $4}' /home/work/datesep.txt > /home/work/temp.txt  
TEMP=/home/work/temp.txt  
COUNT=`cat ${TEMP} | wc -l`  
echo $COUNT  
echo $TEMP  
LINE_NUM=1  
while read LINE  
do  
        DATE=`awk -F '/' '{print $1}' LINE`  
        MONTH=`awk -F '/' '{print $2}' LINE`  
        YEAR=`awk -F '/' '{print $3}' LINE`  
        echo "${MONTH}/${DATE}/${YEAR}"  
        ((LINE_NUM++))  
done < $TEMP 

고양이 테스트 4.sh

#!/bin/bash  
awk -F '|' '{print $4}' /home/work/datesep.txt > /home/work/temp.txt  
TEMP=`/home/work/temp.txt`    
for LOOP in `/home/work/temp.txt `  
do  
        DATE=`awk -F '/' '{print $1}' $LOOP`  
        MONTH=`awk -F '/' '{print $2}' $LOOP`  
        YEAR=`awk -F '/' '{print $3}' $LOOP`  
        echo "${MONTH}/${DATE}/${YEAR}"  
done  

답변1

|질문에 제공된 입력 및 예상 출력의 첫 번째 세트에서 작업하고 세 번째로 구분된 필드에 있는 날짜의 월과 일만 교환한다고 가정합니다 .

$ awk -F '|' -v OFS='|' 'NR > 1 { split($3, a, "/"); $3 = sprintf("%s/%s/%s", a[2],a[1],a[3]) } 1' <file
S.no|Name|Joining_Date|Address
1|asdasd|18/09/2018|asdas
2|asd|18/09/2018|asdasd
3|asdas|18/09/2018|aadadw

이 명령은 각 입력 행을 awk-로 구분된 필드가 있는 레코드로 처리합니다. |각 행(첫 번째 행 제외)에서 세 번째 필드를 가져와서 /array 로 분할합니다 a. 그런 다음 배열을 사용하여 필드를 a원하는 형식으로 재조립하고 순서를 사용합니다 sprintf()(비슷하게 작동 printf()하지만 출력하는 대신 생성된 문자열을 반환합니다). 1끝에 있는 아일랜드는 각 줄이 출력되도록 합니다(이것은 간단히 작성하는 방법입니다 { print }).

관련 정보