Как сделать CSV-файл в сопоставлении столбцов - PullRequest
0 голосов
/ 29 октября 2019

У меня есть сценарий awk, который читает вывод печатной рекламы, последние 3 столбца были объединены, при запуске сценария предполагается, что объединенные столбцы состоят из 18 цифр, а не до 18 цифр. заполнены нулями, чтобы соответствовать требуемому формату.

Это мой CSV-файл, который читает скрипт awk:

Account number (preferred / formatted),Customer reference,Posting date,Account currency,Transaction amount
750856653,233420,3/9/2019,USD,-2092.99
750856653,233417,3/9/2019,USD,-2856.15
750856653,233426,3/9/2019,USD,-2392.25
750856653,233414,3/9/2019,USD,-1733.22
750856653,233424,3/9/2019,USD,-1850.31
750856653,233403,3/9/2019,USD,-1850.32
750856653,233413,3/9/2019,USD,-1439.58
750856653,233431,3/9/2019,USD,-186.66

это мой текущий вывод при запуске скрипта: (Последний столбец должениметь 18 цифр, но, как и первые 3 строки в последнем столбце.)

750-85665-3 0000233446  09162019000000230644
750-85665-3 0000233435  09162019000000173321
750-85665-3 0000233442  09162019000000219319
750-85665-3 0000233443  0916201900000097416
750-85665-3 0000233429  0918201900000069263
750-85665-3 0000233447  092320190000006619
750-85665-3 0000233450  092320190000001461
750-85665-3 0000233451  0923201900000035631

Мой код:

  awk '
  BEGIN{ FS=","
   }
  FNR==1{
  print
   next
 }
   $2!~/NONREF/{
    $1=substr($1,1,3)"-"substr($1,4,5)"-"substr($1,length($1))
$2="0000"$2
split($3,array,"/")
    $3=sprintf("%02d%02d%s",array[2],array[1],array[3])
gsub(/^-|\./,"",$NF)
     $3=$3"000000"$NF
  print $1,$2,$3
  }
  '  Input_file

Это мой желаемый вывод, каким я хочу, чтобы последний столбец был,все 18 цифр с заполненными нулями.

750-85665-3  0000219839 090519000000017170
750-85665-3  0000233423 090519000000087349
750-85665-3  0000233416 090619000000047765
750-85665-3  0000233425 090619000000129305
750-85665-3  0000233421 090919000000199722
750-85665-3  0000219838 091019000000026502
750-85665-3  0000233415 091019000000169140
750-85665-3  0000233419 091119000000099291
750-85665-3  0000233433 091319000000188880
750-85665-3  0000233438 091319000000296821
750-85665-3  0000233452 091619000000323724
750-85665-3  0000233441 091619000000190742
750-85665-3  0000233446 091619000000230644

РЕДАКТИРОВАТЬ (автор Ravinder): этот дополнительный вопрос выглядит для Вывод CSV-файла некорректен один, хотя OP по-прежнему необходимо добавлять образцыдля всех пользователей, понимающих цели, думал добавить это здесь.

1 Ответ

1 голос
/ 29 октября 2019

РЕДАКТИРОВАТЬ: Согласно OP, чтобы вставить пробелы между 1-м и 2-м столбцом, попробуйте выполнить следующее.

awk -v s1="      " '
BEGIN{
  FS=","
}
FNR==1{
  print
  next
}
$2!~/NONREF/{
  $1=substr($1,1,3)"-"substr($1,4,5)"-"substr($1,length($1))
  $2=sprintf("%010d",$2)
  split($3,array,"/")
  $3=sprintf("%02d%02d%s",array[2],array[1],substr(array[3],3))
  gsub(/^-|\./,"",$NF)
  $NF=sprintf("%012d",$NF)
  $3=$3 $NF
  print $1 s1 $2,$3
}
'  Input_file


После прохожденияпредыдущий пост ОП, не могли бы вы попробовать следующее. Это гарантирует, что ваш новый 3-й столбец будет иметь 18 цифр (8 для даты + 10 цифр из последнего поля, включая нули).

awk '
BEGIN{
  FS=","
}
FNR==1{
  print
  next
}
$2!~/NONREF/{
  $1=substr($1,1,3)"-"substr($1,4,5)"-"substr($1,length($1))
  $2=sprintf("%010d",$2)
  split($3,array,"/")
  $3=sprintf("%02d%02d%s",array[2],array[1],substr(array[3],3))
  gsub(/^-|\./,"",$NF)
  $NF=sprintf("%012d",$NF)
  $3=$3 $NF
  print $1,$2,$3
}
'  Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...