объединить два текстовых файла в bash, разделенных запятой

Вот ваш пример-Notepadqq-установлен в Debian 10.0.0 Buster .

Хотя Ubuntu -ориентирован, на самом деле официальный notepadqq PPA-репозиторий действительно содержит файлы.deb!

(Я выбрал Ubuntu 18.04 Bionic из технических деталей .)

Загрузите оба следующих файла.deb:

http://ppa.launchpad.net/notepadqq-team/notepadqq/ubuntu/pool/main/n/notepadqq/notepadqq-common_1.4.4-1~bionic1_all.deb
http://ppa.launchpad.net/notepadqq-team/notepadqq/ubuntu/pool/main/n/notepadqq/notepadqq_1.4.4-1~bionic1_amd64.deb

Установите через клемму следующим образом:

sudo dpkg -i./notepadqq-common_1.4.4-1~bionic1_all.deb
sudo apt-get install -f

sudo dpkg -i./notepadqq_1.4.4-1~bionic1_amd64.deb
sudo apt-get install -f

Успех! (См. :/usr/share/applications/notepadqq.desktop)

0
14.10.2021, 14:52
1 ответ

Настоящей проблемой является разделитель полей из 2 -символов. Такие инструменты, как объединение и сортировка, предполагают, что разделитель будет состоять только из одного символа :

.
join -t, -13 -21 -o 1.1,1.2,1.3,2.2,2.3 \
  <(sed -E 's/, +/,/g' file1.txt | sort -t, -k3,3) \
  <(sed -E 's/, +/,/g' file2.txt | sort -t, -k1,1)

выходы

Doe,John,phone123,longdistance,10mins
Dane,Jane,phone124,local,5mins
Dane,Jane,phone124,longdistance,6mins

И вы можете передать это в | sed 's/,/, /g', чтобы восстановить разделители "запятая".


Альтернативно,

awk '
    BEGIN {FS = ", *"; OFS = ", "}
    NR == FNR {name[$3] = $1 OFS $2; next}
    $1 in name {print name[$1], $0}
' file1.txt file2.txt
0
14.10.2021, 17:05

Теги

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