Заменить одно поле в файле данных значением из файла карты, если конкретное поле файла данных соответствует ключу в карте

Если вы используете systemd, вы можете запустить версию BlueZ, используяsystemctl:

sudo systemctl status bluetooth

Будет выведено что-то вроде этого:

bluetooth.service - Bluetooth service
Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; 
vendor preset: enabled)
Active: active (running) since Wed 2018-07-25 13:00:52 UTC; 14min ago
Docs: man:bluetoothd(8)
Main PID: 471 (bluetoothd)
Status: "Running"
CGroup: /system.slice/bluetooth.service
        └─471 /usr/libexec/bluetooth/bluetoothd

Jul 25 13:00:52 raspberrypi systemd[1]: Starting Bluetooth service...
Jul 25 13:00:52 raspberrypi bluetoothd[471]: Bluetooth daemon 5.50
Jul 25 13:00:52 raspberrypi systemd[1]: Started Bluetooth service.
Jul 25 13:00:52 raspberrypi bluetoothd[471]: Starting SDP server
Jul 25 13:00:52 raspberrypi bluetoothd[471]: Bluetooth management interface 1.14 initialized

Таким образом, вы можете быть на 100 % уверены, что используете правильную версию.

-1
19.08.2020, 14:02
1 ответ

Вы можете попробовать следующую awkпрограмму:

awk -F':' -v OFS=':' 'NR==FNR{map[$2]=$1} NR>FNR && ($5 in map) {$4=map[$5]} NR>FNR' names.txt database.txt 

Сначала будет сгенерирована база данных значений ключа -в ассоциативном массиве mapпри разборе первого файла (, гдеNR==FNR).

Затем при синтаксическом анализе второго файла он проверит, появляется ли 5-е поле($5map, и если да, то заменит 4-е поле соответствующим значением, map[$5].

Он будет печатать выходные строки только при обработке второго файла (, указанного условием NR>FNRвне блоков действий ).

Поскольку оба файла имеют разделитель :-, разделители полей ввода и вывода установлены на:(команда -параметры строки-F':' -v OFS=':').

1
18.03.2021, 23:11

Теги

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