2014-01-28 4 views
0

У меня есть два CSV файлов с именемперебор согласование и объединения Данные

alexa_products.csv

name,   sku,  urle,  product, data 

amazon, amazon.com, current, mobile, seller 

vinnes, vinnes.com, current, cellular, Aircel_Indore 

data.csv

name,   sku,  urle, product, data 

linkedin.com, linkeidn, current, local,  blah 

airtel.com, airtel, current, sim,  Airtel 

amazon.com, amazon, face, network, buyier 

vinnes.com, vinnes, look, hands,  ddde 

Теперь я должен совпадать с именем из file1 и sku из файла2, если есть какое-либо совпадение, и мне нужно распечатать только конкретный столбец в другом файле csv

+1

Добро пожаловать на SO. Обычно люди приходят сюда, чтобы задать вопрос. Что-то в этом роде: «вот моя проблема, я попробовал X, но вместо того, чтобы получить Y, я получаю Z. Откуда я ошибся?» , Можете ли вы улучшить свой пост, чтобы стать таким вопросом? – Floris

+0

Вам нужен «perl» ответ, или вы готовы принять других? Вы отметили вопрос 'perl', но не пытались написать какой-либо скрипт perl' ... – Floris

+0

@Floris Я хочу получить ответ в perl –

ответ

1

Пока вы ждете кого-то, чтобы дать вам perl решение, вот awk один вкладыш:

awk 'BEGIN{FS=","}FNR==NR{if(NR>1){a[$2]=$2;next}}($2 in a){print $0}' alexa_products.csv Data.csv 

Объяснение:

BEGIN  - do this before anything else 
FS="," - set "field separator" to comma 
FNR==NR - do this if the total number of records == records in this file; 
      this means you are processing the first file 
if(NR>1) - skip the first line (or you will get "sku" to match "ski") 
a[$2]=$2; - create an array a with value = key = field 2 (the sku column) 
($2 in a) - processing the second file : is the sku found in the array 
print $0 - if so, print the whole line 
+0

Спасибо за ваш ответ. Я не хочу только амазонки и виноградные лозы, но мне нужны все данные строки совпадающего столбца. –

+0

Ну, это странная интерпретация «Мне нужно распечатать только конкретный столбец в другом CSV-файле». Просто измените последний '$ 2' на' $ 0', чтобы напечатать всю строку – Floris

+0

Я обновил свой ответ, чтобы показать, как это делается. – Floris

0
  1. Хэш значения данного столбца из файла меньшего размера.
  2. Обработать файл большего размера,
  3. если значение в данном столбце существует как ключ в хэше, выведите его.

Использовать Text::CSV для обработки данных CSV.

Смежные вопросы