텍스트 파일이 있습니다. txt 파일의 시간/날짜 스탬프에 쉼표를 추가하거나 다음 텍스트를 3개 열의 csv로 변환하고 싶습니다.

텍스트 파일이 있습니다. txt 파일의 시간/날짜 스탬프에 쉼표를 추가하거나 다음 텍스트를 3개 열의 csv로 변환하고 싶습니다.

텍스트 파일이 있습니다. 시간/날짜 스탬프에 쉼표를 추가하고 싶습니다.

$ 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

두 번째 매개변수는 1mktime을 사용하므로 타임스탬프는 UTC 시간입니다. 타임스탬프가 현지 시간인 경우 0으로 변경합니다.

관련 정보