sed를 사용하여 공백을 제거하고 날짜 타임스탬프를 건너뜁니다.

sed를 사용하여 공백을 제거하고 날짜 타임스탬프를 건너뜁니다.

s/\ //gCSV 파일에서 공백을 제거하고 싶습니다. 다음을 사용 "06-JAN-15 13:20:00"하면 됩니다 ."06-JAN-1513:20:00"

한 가지 해결책은 모든 공백을 제거한 다음 날짜를 찾아 06-JAN-15그 뒤에 공백을 추가하는 것입니다. 이 작업을 수행하는 방법을 잘 모르겠습니다.

샘플 CSV 파일: (한 줄만)

294335,"17-APR-15 00:00:00 ",6258,"C"," <-----huge blank space--->,"07-JAN-15 00:00:00"

huge blank space비어 있지 않으면 XML 메시지가 포함됩니다.

답변1

(?<!...)sed는 아니지만 Perlre에서 부정적인 LookBehind 어설션을 사용하는 솔루션이 있습니다.

perl -pe 's/(?<!\d\d-(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)-\d\d) //g'

답변2

사용밀러( mlr) 데이터의 공백을 정리하려면 다음을 수행합니다.

$ cat file
294335,"17-APR-15 00:00:00 ",6258,"C","                          ","07-JAN-15 00:00:00"
$ mlr --csv -N clean-whitespace file
294335,17-APR-15 00:00:00,6258,C,,07-JAN-15 00:00:00
$ mlr --csv -N --quote-all clean-whitespace file
"294335","17-APR-15 00:00:00","6258","C","","07-JAN-15 00:00:00"

mlr별도로 지정하지 않는 한 불필요한 따옴표를 제거 하십시오 --quote-all.모두필드). 이 -N옵션을 사용하면 Miller는 첫 번째 줄을 헤더 대신 데이터 레코드로 읽습니다.

답변3

사용 awk:

< input awk 'BEGIN {FS=OFS=","} {gsub(" ", "", $1); gsub(" ", "", $3); gsub(" ", "", $4); gsub(" ", "", $5); print}'

이렇게 하면 각 레코드의 쉼표로 구분된 첫 번째, 세 번째, 네 번째 및 다섯 번째 필드에서 공백 문자가 제거되는 효과가 있습니다.

답변4

실제로 이 파일을 CSV 파일로 구문 분석하고 추가 공백을 제거할 수 있습니다.

ruby -rcsv -ne '
    row = CSV::parse_line($_)
    puts CSV::generate_line(row.map {|field| field.strip})
' file
294335,17-APR-15 00:00:00,6258,C,"",07-JAN-15 00:00:00

관련 정보