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

Это похоже на регресс ядра в 4.x Linux, по крайней мере, для вашего конкретного оборудования.

http://archlinuxarm.org/forum/viewtopic.php?f=53&t=8798

Это может быть в этом коммите, но трудно сказать, поскольку вы не предоставили никакой дополнительной информации о своей системе.

https://github.com/torvalds/linux/commit/a0b5cd4ac2d6542d524d8063961bf914b5df1efa

В некоторых системах, по-видимому, возникают проблемы как минимум с USB 3: https://lists.debian.org /debian-kernel/2015/08/msg00066.html

Итак, реальный вопрос заключается в том, какое у вас оборудование и какое последнее ядро ​​4.x вы пробовали. Это могло быть решено в недавнем выпуске 4.x. Проблема с usb 2 и 3, или только с 3, или не связана с версией usb? Это поможет сузить круг вопросов. Ваши данные выглядят так, как будто это просто usb2 max в вашей системе.

Регрессия ядра - это нормально.

Как я говорю людям, когда они задают вопросы такого типа, новое ядро ​​Linux имеет несколько возможных результатов:

  1. что-то, что раньше не работало, теперь работает
  2. все осталось прежним в вашей системе
  3. что-то которая работала раньше, перестала работать
  4. кое-что стало лучше, а кое-что перестало работать

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1455376 {{1} } Это ошибка Ubuntu с обработкой usb.

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

Если вы используете ubuntu, вы можете запустить ядро ​​Liquorix, по крайней мере, если это текущий ubuntu, а не LTS, то же самое для нестабильных выпусков debian.

Просмотр: inxi -bxxx поможет показать основы вашей системы. inxi можно установить из большинства репозиториев дистрибутивов.

Вот список изменений USB для 4.0 / 3.20 Грега К. Х.

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=e29876723f7cb7728f0d6a674d23f92673e9f112

  usb: musb: fix device hotplug behind hub
  usb: dwc2: Fix a bug in reading the endpoint directions from reg.
  staging: emxx_udc: fix the build error
  usb: Retry port status check on resume to work around RH bugs
  Revert "usb: Reset USB-3 devices on USB-3 link bounce"
  uhci-hub: use HUB_CHAR_*
  usb: kconfig: replace PPC_OF with PPC
  ehci-pci: disable for Intel MID platforms (update)
  usb: gadget: Kconfig: use bool instead of boolean
  usb: musb: blackfin: remove incorrect __exit_p()
  USB: fix use-after-free bug in usb_hcd_unlink_urb()
  ehci-pci: disable for Intel MID platforms
  usb: host: pci_quirks: joing string literals
  USB: add flag for HCDs that can't receive wakeup requests (isp1760-hcd)
  USB: usbfs: allow URBs to be reaped after disconnection
  cdc-acm: kill unnecessary messages
  cdc-acm: add sanity checks
  usb: phy: phy-generic: Fix USB PHY gpio reset
  usb: dwc2: fix USB core dependencies
  usb: renesas_usbhs: fix NULL pointer dereference in dma_release_channel()

http://kernelnewbies.org/Linux_4.0 показывает полный набор изменений.

https://lkml.org/lkml/2015/6/26/511 это изменения в USB для 4.2-rc1. Как видите, вопрос «что изменилось», вероятно, не совсем правильный вопрос, более полезным было бы определить, решена ли проблема для вашего оборудования в последних выпусках.

0
01.11.2018, 15:09
4 ответа
{
    if (dom[$1]) 
        dom[$1]=dom[$1]","$2
    else 
        dom[$1]=$2
} 

END {
    ORS=",";
    for (d in dom)
        if (d)
            print ("\""d"(server:"dom[d]")""\"")
}

Это быстрое и грязное решение для awk. Сохраните его как something.awk, затем запустите:

awk -f something.awk Names.txt 

Быстрое исправление в ответ на ваш комментарий :

{ dom[$1]=dom[$1] ? dom[$1]",server:"$2 : "server:"$2 }

END {
    for (d in dom)
        if (d) {
            out && out = out","
            out = out"\""d"("dom[d]")""\""
        }
        print out
}
0
28.01.2020, 04:20

Вы можете использовать этот код. Прочтите код перед его выполнением, поскольку он создает каталог в папке /tmpс именем domains, а затем удаляет его в конце

.
 DOMAIN=''

    IFS=' '
    declare -A domain
    mkdir /tmp/domains
    while read line
    do
            DOMAIN=$(echo $line | awk  '{print $1}')
            SERVER=$(echo $line | awk '{print $2}' )
            echo "$SERVER," >> /tmp/domains/$DOMAIN
            domain[$DOMAIN]=1
    done < Names.txt

    sed -ir "$ s/.,$//" /tmp/domains/*

    for i in "${!domain[@]}"; do
             echo -n "$i(server:";
             while read line ; do
                 echo -n "$line" ;
             done < /tmp/domains/$i
             echo ")"
    done
    rm -rf /tmp/domains

Это создает папку в папке /tmp со следующими данными, так что каждое имя файла домена имеет список содержащихся в них серверов

$ ls -lhtr /tmp/domains/
total 12K
-rw-rw-r-- 1 arushirai arushirai 11 Jun 19 17:54 TADDomain
-rw-rw-r-- 1 arushirai arushirai 16 Jun 19 17:54 LinkDomain
-rw-rw-r-- 1 arushirai arushirai 32 Jun 19 17:54 ABCDomain

$ cat /tmp/domains/ABCDomain 
ContractABCServer_1,
ABC_server
$ cat /tmp/domains/LinkDomain 
CoreLinkServer_
$ cat /tmp/domains/TADDomain 
TADServer_
0
28.01.2020, 04:20

Вы можете собрать строки, разделенные запятыми -, непосредственно в awkи напечатать композит в конце:

  $1 == "ABCDomain"  {d = (d == "") ? $2 : d "," $2; next} 
  $1 == "LinkDomain" {l = (l == "") ? $2 : l "," $2; next} 
  $1 == "TADDomain"  {t = (t == "") ? $2 : t "," $2; next} 

  END {
    printf("\"ABCDomain(server:%s)\",\"LinkDomain(server:%s)\",\"TADDomain(%s)\"\n", d, l, t)
  }

Пр.

$ awk '
  $1 == "ABCDomain"  {d = (d == "") ? $2 : d "," $2; next} 
  $1 == "LinkDomain" {l = (l == "") ? $2 : l "," $2; next} 
  $1 == "TADDomain"  {t = (t == "") ? $2 : t "," $2; next} 

  END {
    printf("\"ABCDomain(server:%s)\",\"LinkDomain(server:%s)\",\"TADDomain(%s)\"\n", d, l, t)
  }' Names.txt
"ABCDomain(server:ContractABCServer_1,ABC_server1)","LinkDomain(server:CoreLinkServer_1)","TADDomain(TADServer_1)"
0
28.01.2020, 04:20

(Обновлено для исправления выходного формата)

Использованиеawk:

BEGIN { OFS = "," }

{ servers[$1] = (servers[$1] == "" ? "server:" $2 : servers[$1] "," "server:" $2 ) }

END {
    $0 = ""
    for (domain in servers)
        $(++n) = sprintf("\"%s(%s)\"", domain, servers[domain])

    print
}

Это добавит серверы в виде строки -с разделителями-запятыми к определенному домену в основном блоке при анализе входного файла. Это делается путем изменения массива servers, который содержит серверы для определенного домена, (домен является ключом в массиве ).

В блоке ENDмы перебираем все ключи/домены в массиве serversи создаем выходную запись в указанном формате.

Запуск на предоставленных данных:

$ awk -f script.awk names.txt
"TADDomain(server:TADServer_1)","ABCDomain(server:ContractABCServer_1,server:ABC_server1)","LinkDomain(server:CoreLinkServer_1)"

Практически эквивалентный bashскрипт (требует bash4.3+ для ассоциативного массива):

declare -A servers

while read domain server; do
    servers[$domain]+="${servers[$domain]:+,}server:$server"
done <names.txt

for domain in "${!servers[@]}"; do
    out+="${out:+,}\"$domain(${servers[$domain]})\""
done

printf '%s\n' "$out"

... но см. " Почему использование цикла оболочки для обработки текста считается плохой практикой? ".

0
28.01.2020, 04:20

Теги

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