Unix-CSV 형식

Unix-CSV 형식

아래 형식을 A에서 B로 변환하려고 합니다. 처음 두 열이 데이터가 그대로 유지된 상태로 최종 형식으로 교환되고 그 사이에 파이프되는 것을 볼 수 있으며 까다로운 부분은 날짜 형식이 변경된 마지막 부분입니다. 2016-09-06 08:49:00 ~ "2016/06/09 오전 08:49:00". 나는 bash 쉘을 사용하고 있으며 동일한 작업을 수행하려면 스크립트가 필요합니다.

ㅏ:

Display Name,SAM Account Name,Distinguished Name,Last Logon Time Stamp
Yolanda Perez,yperez1,"CN=Yolanda Perez,OU=Users,OU=PR - Miami SPCG,OU=PR - Puerto Rico,OU=Puerto Rico,OU=Caribbean - Unified,DC=intl,DC=bns",2016-09-06 08:49:00

비:

"SAM Account Name"|"Display Name"|"Distinguished Name"|"Last Logon Time Stamp"
"yperez1"|"Yolanda Perez,CN=Yolanda Perez"|"OU=Users,OU=PR - Miami SPCG,OU=PR - Puerto Rico,OU=Puerto Rico,OU=Caribbean - Unified,DC=intl,DC=bns"|"09/06/2016 08:49:00 AM"

답변1

나는 bash에서 순수하게 그것을 하려고 시도하는 것이 상당히 까다로울 것이라고 생각합니다.

csvfix당신을 위해 대부분의 작업을 수행하는 프로그램이 있습니다 :http://neilb.bitbucket.org/csvfix/

답변2

다음 답변은 다음을 기반으로합니다.이것그리고이것.

#!/bin/bash

awk -vFPAT='([^,]*)|("[^"]+")' -vOFS=, '{
    if (NR == 1) {
        print "\""$2"\"" "|" "\""$1"\"" "|" "\"" $3 "\"" "|" "\""$4"\""
    } else {
        cmd ="date \"+%m/%d/%Y %H:%M:%S %p\" -d \""$4"\""
        cmd | getline var
        close(cmd)
        print "\""$2"\"" "|" "\""$1"\"" "|"$3"|" "\""var"\""
    }
}' data.csv

여기에 data.csv입력 파일이 있습니다( A귀하의 예에서는). 위의 스크립트( 이름 csv2pipe.sh)를 다음과 같이 실행합니다 bash csv2pipe.sh. 출력은 아래와 같습니다.

"SAM Account Name"|"Display Name"|"Distinguished Name"|"Last Logon Time Stamp"
"yperez1"|"Yolanda Perez"|"CN=Yolanda Perez,OU=Users,OU=PR - Miami SPCG,OU=PR - Puerto Rico,OU=Puerto Rico,OU=Caribbean - Unified,DC=intl,DC=bns"|"09/06/2016 08:49:00 AM"

답변3

와 함께perl

perl -MTime::Piece -F, -alne '
  print $.==1? "\"".join("\"|\"", $F[1], $F[0], @F[2..$#F])."\""
  : join("|", "\"".$F[1]."\"", "\"".join(",", $F[0], substr($F[2],1))."\"", "\"".join(",", @F[3..9]), Time::Piece->strptime($F[10], "%Y-%m-%d %H:%M:%S")->strftime("\"%m/%d/%Y %H:%M:%S %p\""))
' file.csv
"SAM Account Name"|"Display Name"|"Distinguished Name"|"Last Logon Time Stamp"
"yperez1"|"Yolanda Perez,CN=Yolanda Perez"|"OU=Users,OU=PR - Miami SPCG,OU=PR - Puerto Rico,OU=Puerto Rico,OU=Caribbean - Unified,DC=intl,DC=bns"|"09/06/2016 08:49:00 AM"

관련 정보