2016-02-10 3 views
0

У меня есть два CSV-файла. Один из них - словарь, а другой - файл, который я хочу изменить. Словарь имеет 3 колонки:AWK для решения CSV-значений

DEPT_CODE,DEPT,DEPT_NAME 
500,Billing,Billing Department 
300,Accounting,Accounting Department 
... 

входной файл имеет 7 столбцов:

TF,DOC,SECTION,XOFFSET,HEADING,YOFFSET,DEPT_CODE 
TRUE,JOURNAL,Header Section,12345,Heading 1,55152,500 
FALSE,BINDER,Body Section,23456,Heading 2,66425,300 
... 

Я хочу использовать AWK заменить 7-й столбец входного файла со 2-й колонке словаря файла, когда Столбец 7 входного файла и столбец 1 словарного файла совпадают.

Например:

TRUE,JOURNAL,Header Section,12345,Heading 1,55152,Billing 
FALSE,BINDER,Body Section,23456,Heading 2,66425,Accounting 
... 

Я использую следующий и не получить никаких результатов. Что я делаю не так?

awk -F',|, ' 'NR==FNR{a[$1]=$2} NR>FNR{$7=a[$7];print}' OFS=',' "$dictionary.csv" "$input.csv" 
+0

Я использовал | разделители в моем контексте вопроса, но мои настоящие данные имеют разделители. – didjit

+0

Будет ли в файле словаря более одной строки? – dawg

+0

Да, много строк – didjit

ответ

0

Фу!

Учитывая ваш пример данных с заголовком:

$ cat /tmp/f1.txt 
DEPT_CODE,DEPT,DEPT_NAME 
500,Billing,Billing Department 
300,Accounting,Accounting Department 
$ cat /tmp/f2.txt 
TF,DOC,SECTION,XOFFSET,HEADING,YOFFSET,DEPT_CODE 
TRUE,JOURNAL,Header Section,12345,Heading 1,55152,500 
FALSE,BINDER,Body Section,23456,Heading 2,66425,300 

Вы можете сделать:

$ awk -F, 'BEGIN{OFS=FS} FNR<2 {next} FNR==NR{a[$1]=$2; next} {$7=a[$7]; print}' /tmp/f1.txt /tmp/f2.txt 
TRUE,JOURNAL,Header Section,12345,Heading 1,55152,Billing 
FALSE,BINDER,Body Section,23456,Heading 2,66425,Accounting 
+0

действительно не обман здесь. в основном нужно искать значение 7-го столбца. – didjit

+0

Когда я запускаю любой из них, я просто получаю: Column1, Column2, Column3, Column4, Column5, Column6, – didjit

+1

@didjit Никто не думает, что вы пытаетесь обмануть нас, но, возможно, что-то в ваших столбцах 1-> 6, что важно к решению, но которое вы не признали важным. Вот почему для вас важно разместить некоторые действительно репрезентативные данные вместо того, чтобы составлять некоторые однопользовательские пробелы во всех полях на всех линиях. Тот факт, что это решение не работает для вас, указывает, что, вероятно, есть что-то актуальное в отношении ваших реальных данных, которые вы еще не показали нам. –

0

awk на помощь!

$ awk -F, -v OFS=, 'NR==FNR{a[$1]=$2;next} $7=a[$7]' dict file 

Column1,Column2,Column3,Column4,Column5,Column6,Billing 
Column1,Column2,Column3,Column4,Column5,Column6,Accounting 
Смежные вопросы