заменить определенные значения столбца, используя ссылку на другой файл - PullRequest
0 голосов
/ 23 мая 2019

У меня есть сценарий оболочки, и часть кода должна создать файл, заменив значения column1 в File1 и заполнив значения в File2.

$ cat File1
CUST01,375
CUST02,379

и

$ cat File2
CUST01,CUST01,233901
CUST01,CUST01,233902

требуемый вывод из File2:

375,CUST01,233901 
375,CUST01,233902

Я попробовал приведенную ниже команду, чтобы заполнить значения из File1 в File2,

awk -F, 'NR==FNR { a[$1]=$2; next } { for(i in a) {for(x=1;x<=NF;x++) {$x=(i==$x)?a[i]:$x } } }1' File1 File2`

и получение ниже выхода

375,375,233901
375,375,233902

Я хочу заменить соответствующие значения только в column1, вместо этого метод awk приводит к замене значений во всех столбцах, любая помощь.

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Конечно, не эксперт awk, но мне кажется, что это работает:

awk -v FS=',' -v OFS=',' 'NR == FNR { a[$1] = $2; next } { $1 = a[$2] }1' File1 File2

С вашими примерами входных файлов это вывод:

375,CUST01,233901
375,CUST01,233902
0 голосов
/ 23 мая 2019

Вы можете попробовать это, но без проверки ошибок:

declare -A dict
while IFS=, read -r key value; do
    dict[$key]="$value"
done < file1

while IFS=, read -r col1 col2 col3; do
    printf "%s,%s,%s\n" "${dict[$col1]}" "$col2" "$col3"
done < file2

Объяснение

# create associativ array
declare -A dict

# read key and value from file, separator is ','
while IFS=, read -r key value; do
    # write key and value into associativ array
    dict[$key]="$value"
done < file1

# loop over file2, read three columns, separator is ','
while IFS=, read -r col1 col2 col3; do
    # print columns, first column is the value from associativ array
    printf "%s,%s,%s\n" "${dict[$col1]}" "$col2" "$col3"
done < file2
...