Соответствие и вставка к строке

Насколько я могу сказать execi должен работать, не уверенный, почему это не делает. В любом случае я добираюсь conkyпоказать мой общедоступный IP следующим образом:

${texeci 3600 wget -qO - http://cfajohnson.com/ipaddr.cgi}

Попытайтесь заменить execi с texeci, посмотрите, помогает ли это.

Другая возможная проблема - это conky может быть загружен, прежде чем Ваше соединение устанавливается. Если так, это выполнит Ваш execi команда на запуске, но это не получит результата, так как Вы еще не соединены. Я обхожу этот тип проблемы путем запуска conky через сценарий обертки, который похож на это:

#!/bin/bash
sleep 20
conky
7
13.09.2015, 00:43
4 ответа

Это звучит как задача для Присоединиться :

join -t":" -o "1.1,1.2,1.3,1.4,1.5,2.1,2.2,2.3" \
   -j 2 <(sort -k2,2 -t: test1) <(sort -k2,2 -t: test2)

:

join -t":" -o "1.1,1.2,1.3,1.4,1.5,2.1,2.2,2.3" \
   -j 2 <(sort -k2,2 -t: test1) <(sort -k2,2 -t: test2)

Выход:

Julian:Brude:Other:Other:Other:Jb:Brude:kemin
Robert:Dillain:Other:Other:Other:R:Dillain:bodent
Megan:Flikk:Other:Other:Other:Mb:Flikk:kentin
Jesus:Kimmel:Other:Other:Other:Jbb:Kimmel:verlin
Samantha:Minot:Other:Other:Other:Sb:Minot:amsen

Разбивка:

  • -T Установите разделитель поля на :
  • -O Установить формат печати
  • -J Присоединяйтесь к номеру столбца 2
  • <(сортировка -K2,2 -T: файл) Сортировать файл по -k Второй колонн -T -T Установите поле разделителя в :
8
27.01.2020, 20:15

через Python3

#!/usr/bin/python3
import csv
import sys
file1, file2 = sys.argv[1], sys.argv[2]
with open(file2) as second, open(file1) as first:
    second_list = second.readlines()
    first_list = first.readlines()
for line1 in first_list:
    for line2 in second_list:
        if line1.split(':')[1] == line2.split(':')[1]:
            print(line1.strip()+line2.strip())

Копировать и вставить вышеуказанный скрипт в файл, называемый Script.py . А затем запустите скрипт, запустив следующую команду на терминале.

python3 script.py file1 file2
0
27.01.2020, 20:15

Это простую задачу для AWK :

awk -F':' -vOFS=':' 'NR==FNR{a[$2]=$0;next}{print $0,a[$2]}' file2 file1

Сначала мы устанавливаем : : в качестве сепаратора поля для ввода (с -F ) и вывод (с ofS ), затем, если первый файл обрабатывается ( file2 ) Мы назначаем целую строку к элементу таблицы, проиндексированному со вторым полем. Когда следующий следующий файл ( file1 обрабатывается, мы распечатываем его строки, добавляющие строку из предыдущего файла, хранящегося в A [2] [$ 2] ).

5
27.01.2020, 20:15

С помощью sed вы, вероятно, сможете сделать:

sed 's|[^:]*:\([^:]*\).*|/^[^:]*:\1:/s/$/:&/;t|' file2 | sed -f - file1

... что потребует от одного процесса sed чтения второго файла и написания сценария sed для редактирование первого во второй sed stdin. Насколько я могу судить, у вас не должно возникнуть проблем с прямым вводом содержимого в такое регулярное выражение. Если есть возможность ввода метасимволов, на этом сайте есть множество ответов, в которых обсуждаются способы их экранирования. Однако, если это может потребоваться, следующего будет достаточно:

sed 's|[]&\./*[]|\\&|g;s|...' ... | sed -f - file1

Тем не менее, вероятно, одноименное join - лучшее решение - это просто демонстрация того, как это сделать с sed , потому что вы это упомянули.

В любом случае, сценарий, который второй sed применяет к file1 , в итоге выглядит как (со строкой, подобной приведенной ниже, для каждой строки в file2) :

/^[^:]*:Dillain:/s/$/:R:Dillain:bodent/;t

... что означает, что если он обнаруживает строку, совпадающую с Dillain для второго поля, разделенного двоеточиями, то он должен добавить строку : R: Dillain: bodent в его хвост. Поскольку, вероятно, нет смысла продолжать попытки сопоставить строку в file1 , если строка из file2 уже была добавлена, завершающая команда t est просто ветвится отменить любую успешную замену, как только она будет завершена.

2
27.01.2020, 20:15

Теги

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