텍스트 파일이 있습니다. 시간/날짜 스탬프에 쉼표를 추가하고 싶습니다.
$ cat sample.txt
name1 [jdk] Mon Nov 01 12:14:04 EST 2004 Mon Jan 01 00:37:19 EST 2035
아래와 같은 출력을 원하며 csv
파일로 변환해야 합니다.
name1 [jdk],Mon Nov 01 12:14:04 EST 2004,Mon Jan 01 00:37:19 EST 2035
답변1
GNU sed를 사용하면 공백이 무엇인지, 첫 번째 날짜 앞에 어떤 텍스트가 나타나는지는 중요하지 않습니다.
$ sed -E 's/(.*\S)\s+((\S+\s+){5}\S+)\s+((\S+\s+){5}\S+)$/\1,\2,\4/' sample.txt
name1 [jdk],Mon Nov 01 12:14:04 EST 2004,Mon Jan 01 00:37:19 EST 2035
답변2
다음 작업을 수행 할 필요가 없습니다 awk
.
cut --output-delimiter="," -c1-28,29-56,62- sample.txt | sed -e "s/ *,/,/"
cut
고정 너비 파일을 읽고 구분된 파일로 변환합니다.
sed
필드 끝에 있는 추가 공백은 제거됩니다.
답변3
awk '{gsub(/[[:space:]]{3,}/,",",$0);print }' file1
산출
name1 [jdk],Mon Nov 01 12:14:04 EST 2004,Mon Jan 01 00:37:19 EST 2035
답변4
아마도 awk를 사용해야 할 것입니다. 홀수 날짜 문자열을 더 유용한 것으로 변경할 수 있기 때문입니다. 즉, 에포크 이후 초 단위의 타임스탬프입니다.
$ awk -F '[ \t:]' 'BEGIN{ m="JanFebMarAprMayJunJulAugSepOctNovDec" }
{ sub("^"FS,"")
mon1 = (match(m,$4)+2)/3;
sec1 = mktime($10" "mon1" "$5" "$6" "$7" "$8 );
mon2 = (match(m,$12)+2)/3;
sec2 = mktime($18" "mon2" "$13" "$14" "$15" "$16);
print( $1,$2,",",sec1,",",sec2 )
}
' sample.txt
name1 [jdk] , 1099311244 , 2051224639
두 번째 매개변수는 1
mktime을 사용하므로 타임스탬프는 UTC 시간입니다. 타임스탬프가 현지 시간인 경우 0으로 변경합니다.