2017-02-07 9 views
0

Я понимаю, что этот вопрос может повторяться, но я не понимаю, что именно я ищу. Итак, вот моя необходимость. Я хочу сопоставить столбец-1 между двумя файлами и добавить столбец-4 файла file2.txt в файл file1.txt. Если столбец не сопоставлен, я хочу добавить «0» в качестве последнего поля в файл1.txtДобавление двух файлов на основе общего столбца

У меня есть два файла, снятых непосредственно с сайта NSE.

Данные для FILE1.TXT выглядит следующим образом:

20MICRONS,20170207,41.4,41.75,40.75,40.95,74624 
3IINFOTECH,20170207,5.5,5.65,5.5,5.6,2679590 
3MINDIA,20170207,11865.7,11919.95,11632.05,11892.25,425 

и так далее. Это мой основной файл, поэтому все строки в файле file1.txt должны быть сохранены.

Данные для file2.txt выглядит следующим образом:

20MICRONS,EQ,57597,77.18 
3IINFOTECH,EQ,1795693,67.01 

и так далее ...

Пожалуйста, обратите внимание, как файл не может содержать одинаковое число строк.

Мой выходной файл может выглядеть,

20MICRONS,20170207,41.4,41.75,40.75,40.95,74624,77.18 
3IINFOTECH,20170207,5.5,5.65,5.5,5.6,2679590,67.01 
3MINDIA,20170207,11865.7,11919.95,11632.05,11892.25,425,0 

Я попробовал это,

awk -F, 'NR==FNR{a[$1]=$0; next} {print a[$1]","$4}' file1.txt file2.txt 

но не получает весь ряд file1.txt как выход.

ответ

0

Что-то, как это должно работать (при условии, что записи в столбце-1 происходит только один раз в обоих файлах):

while read line; 
do 
    col1=$(echo $line | awk -F, '{print $1}'); 
    col4=$(grep $col1 file2.txt | awk -F, '{print $4}'); 
    echo $line,${col4:=0}; 
done < file1.txt 

20MICRONS,20170207,41.4,41.75,40.75,40.95,74624,77.18 
3IINFOTECH,20170207,5.5,5.65,5.5,5.6,2679590,67.01 
3MINDIA,20170207,11865.7,11919.95,11632.05,11892.25,425,0 
+0

Привет, Nehal .. Ваш сценарий работает. Но он занимает слишком много времени, так как в моем файле около 1700 записей. Любое предложение о лучшей версии скрипта? – Ram

0

Вы можете использовать join:

join -a 1 -e 0 -t ',' -j 1 -o '1.1 1.2 1.3 1.4 1.5 1.6 1.7 2.4' file1 file2 

Если файлы Арен Чтобы отсортировать их, вам нужно будет отсортировать их как:

join -a1 -e0 -t, -j1 -o '1.1 1.2 1.3 1.4 1.5 1.6 1.7 2.4' \ 
    <(sort -k1 -t, file1) \ 
    <(sort -k1 -t, file2) 
Смежные вопросы