Unix-CSV フォーマット

Unix-CSV フォーマット

私は以下の形式を A から B に変換しようとしています。最初の 2 つの列は最終形式でデータがそのままの状態で入れ替わり、それらの間でパイプされていますが、最後の部分で日付形式が 2016-09-06 08:49:00 から "09/06/2016 08:49:00 AM" に変更されているのが厄介です。私は 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"

関連情報