Рекурсивно найдите и замените содержимое одного файла, используя ключ из другого файла

Я так и сделал, но никогда не сталкивался с проблемой. Все данные на сервере были на месте, как и на RAID1. Я слышал, что некоторые люди сталкивались с некоторыми трудностями при этом. Вы можете потерять данные, но это вроде как 1 из 100 случаев. Я рекомендую сделать резервную копию перед разбиением RAID, это просто защита от сбоев для вас, так что ваши данные все еще там.

0
22.08.2018, 02:26
3 ответа

Это сработало:

awk -F',' 'NR==FNR{a[$1]=$2} NR>FNR{for (i=1;i<=NF;i++) $i=a[$i];print}' OFS=',' file1 file2 > fileout

Спасибо

1
28.01.2020, 02:23

Не думаю, что это сработает. Результат в моей системе:

,,name0
,name1,name2,name4
name4,,,
,,,,name1
,name3
,,name3

Попробуйте вместо этого

awk -F',' 'NR==FNR{a[$1]=$2; next} {for (i=1;i<=NF;i++) if (a[$i]) $i=a[$i]} 1' OFS=',' file1 file2
23,45,name0
41,name1,name2,name4
name4,5,22,100
10,20,31,51,name1
33,name3
16,111,name3
1
28.01.2020, 02:23

Это также можно сделать с помощьюsed:

sed -f <(sed 's|,|$/,|;s|^|s/,|;s|$|/|' f1) f2

Как указал Кусалананда, это решение использует подстановку процессов, которую поддерживают не все распространенные оболочки. Однако есть и другие способы добиться того же эффекта.

Как это работает? Основная идея состоит в том, чтобы преобразовать файл f1в программу sed, которая, в свою очередь, преобразует файл f2. Команда sedв скобках преобразует каждую строку файла f1в команду s///.

1
28.01.2020, 02:23

Теги

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