Удалить повторяющиеся первые поля файла CSV

Я подозреваю, что >>вызывает у вас конкуренцию за файл nhtsa_vin_data.csvсреди команд curl, которые parallelразветвляются для сбора данных API.

Я бы поправил ваше приложение так:

$ cat p.bash
#!/bin/bash

cat vins.csv | parallel --will-cite -j10% --progress --tmpdir. --files \
   curl -s --data "format=csv" \
     --data "data={1}" https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVINValuesBatch/

Это даст вашим curlкомандам собственный изолированный файл для записи своих данных.

Пример

Я взял эти 3 номера VIN, 1HGCR3F95FA017875;1HGCR3F83HA034135;3FA6P0T93GR335818;, которые вы мне предоставили, и поместил их в файл под названием vins.csv. Затем я воспроизвел их несколько раз, чтобы этот файл имел эти характеристики:

VIN на строку
$ tail -1 vins.csv | grep -o ';' | wc -l
26
Количество строк
$ wc -l vins.csv
15 vins.csv

Затем я запустил свой скрипт, используя эти данные:

$./p.bash

Computers / CPU cores / Max jobs to run
1:local / 1 / 1

Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete
local:1/0/100%/0.0s./pard9QD3.par
local:1/1/100%/10.0s./paruwK9L.par
local:1/2/100%/8.5s./parT6rCS.par
local:1/3/100%/7.3s./pardzT2g.par
local:1/4/100%/6.8s./parDAsaO.par
local:1/5/100%/6.8s./par9X2Na.par
local:1/6/100%/6.7s./par6aRla.par
local:1/7/100%/6.7s./parNR_r4.par
local:1/8/100%/6.4s./parVoa9k.par
local:1/9/100%/6.1s./parXJQTc.par
local:1/10/100%/6.0s./parDZZrp.par
local:1/11/100%/6.0s./part0tlA.par
local:1/12/100%/5.9s./parydQlI.par
local:1/13/100%/5.8s./par4hkSL.par
local:1/14/100%/5.8s./parbGwA2.par
local:0/15/100%/5.4s

Собираем вещи воедино

Когда все вышеперечисленное выполнено, вы можете catобъединить все файлы, чтобы получить один .csvфайл аля:

$ cat *.par > all_data.csv

Будьте осторожны при этом, так как каждый файл имеет свою собственную строку заголовка для содержащихся в нем данных CSV. Чтобы справиться с удалением заголовков из файлов результатов:

$ cat <(head -1 $(ls *.par|head -1)) <(tail -q -n +2 *.par) > all_data.csv

Снижение производительности

В ходе моего тестирования оказалось, что веб-сайт DOT ограничивает запросы, поскольку они продолжают получать доступ к своему API. Приведенное выше время, которое я наблюдал в своих экспериментах, хотя и было небольшим, уменьшалось по мере того, как каждый запрос отправлялся на веб-сайт API.

Моя производительность на моем ноутбуке была следующей:

$ seq 5 | parallel --will-cite --line-buffer 'yes {} | head -c 1G' | pv >> /dev/null
   5GiB 0:00:51 [99.4MiB/s] [                                                                                                                                                                  <=>       ]

ПРИМЕЧАНИЕ.:Вышеизложенное было заимствовано из ответа Оле Танге и изменено. Он записывает 5 ГБ данных через parallelи передает их на pv >> /dev/null. pvиспользуется, чтобы мы могли отслеживать пропускную способность канала и получать тип измерения МБ/с.

Мой ноутбук смог обеспечить ~пропускную способность 100 МБ/с.

Часто задаваемые вопросы по API NHTSA

API

For the ‘Decode VIN (flat format) in a Batch’ is there a sample on making this query by URL, similar to the other actions?

For this particular API you just have to put a set of VINs within the box that are separated by a “;”. You can also indicate the model year prior to the “;” separated by a “,”. There is an upper limit on the number of VINs you can put through this service.

Example in the box is the sample: 5UXWX7C5*BA,2011; 5YJSA3DS*EF

Source: https://vpic.nhtsa.dot.gov/MfrPortal/home/faq searched for "rate"

Выше упоминается, что существует верхний предел при использовании API:

There is an upper limit on the number of VINs you can put through this service.

Ссылки

0
31.07.2020, 15:39
2 ответа
$ awk 'BEGIN{FS=OFS=","} {if ($1==p) gsub(/./," ",$1); else p=$1} 1' file
ACCIDENT EP 4 STEM PERCUS,,         42:30,         43:04,          0:34
                        ,,         43:04,         43:16,          0:11
AICHA 1 COMPLET DECOUPE,,         27:38,         28:42,          1:03
AICHA 2 COMPLET MIX 1,,         23:21,         24:02,          0:40
3
18.03.2021, 23:16
$ awk '$1!=last { last=$1; print; next; }; { $1=" "; print; }' input

A b c
  E R
  F T
B F T
  G 5
C T 5
  H 4
2
18.03.2021, 23:16

Теги

Похожие вопросы