Сравните два файла, если столбцы совпадают, замените следующий столбец некоторым значением.

Простой и широко используемый метод состоит в том, чтобы включить как host1, так и host1.example.com/etc/hosts.

Однако вы можете достичь своей цели, используя dnsmasq. dnsmasqбудет читать ваш файл hosts (настраиваемый, это значение по умолчанию ), вам просто нужно установить исходный ns как восходящий в dnsmasq и localhostкак ns в resolv.conf, и вы можете сохранить свой вариант поиска.Вы получите дополнительное преимущество службы имен с локальным кэшированием.

Это самая базовая (возможно настройка сервера ). Если вы используете resolvconf, например, ns manager, вам необходимо настроить его вместо этого.

Следует иметь в виду, что при внесении изменений в /etc/hostsнеобходимо перезапустить dnsmasq.

0
10.04.2020, 18:15
4 ответа

Это простой способ:

for i in $(cat text1.csv)  
do  
    name=$(echo $i | cut -d',' -f1)   
    empdep=$(echo $i | cut -d',' -f3)  
    newvalue=$(grep $name text2.csv | cut -d',' -f2)    
    if [[ $empdep = sign* ]]    
    then  
        sed -n "s/^$name,\(.*\),.*/$name,\1,$newvalue/pg" text1.csv  
    else  
        echo $i  
    fi  
done
0
19.03.2021, 02:30

Сawk:

awk '
  BEGIN{ FS=OFS="," } # set input/output field separator to `,`
  NR==FNR{            # if this is the first file `test2.csv`
    a[$1]=$2          # store field2 in array `a` using field1 as index
    next              # continue with next line
  } 
  $3 ~ /^sign/{       # if field3 of `test1.csv` begins with `sign`
    $3=a[$1]          # replace the field with array value (index of field1)
  }
  1                   # print the line
' test2.csv test1.csv
1
19.03.2021, 02:30

С помощью kshи sed. Используйте sedдля синтаксического анализа test2.csv и заполнения ассоциативного массива ${new[@]}. Затем прокрутите test1.csv и используйте замену шаблона для печати желаемых результатов:

typeset -A new $(sed -n '2,${s/^/new[/;s/,/]=/p}' test2.csv)
while IFS=, read a b c; do echo $a,$b,${c/#sign*/${new[$a]}}; done < test1.csv

Выход:

empname,place,empdep
aaaa,city1,001
bbbb,city2,002
dddd,city1,005
ffff,city5,007
hhhh,city7,009

Примечание. :В данном случае входные файлы не имеют кавычек, и код визуально проще без кавычек. Если входной файл содержит (или может содержать )пробелы, переменные выше должны быть заключены в кавычки .

0
19.03.2021, 02:30
csv-merge -N t1 -p test1.csv -N t2 -p test2.csv | 
csv-sqlite -T 'select t1.empname, t1.place, case when t1.empdep like "sign%" then t2.new else t1.empdep end as empdep
from t1 left join t2 on t1.empname = t2.empname'

csv -merge и csv -sqlite взяты изhttps://github.com/mslusarz/csv-nix-tools

0
19.03.2021, 02:30

Теги

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