Объединение строк из разных файлов при совпадении с шаблоном

Существует ограничения как для количества аргументов, так и для комбинированной длины аргументов. Это не однородные значения, а зависящие от системы.

Обычно такие проблемы решаются с помощью Xargs .

Но мне кажется, что вы используете , ошибочно . Резак ожидает только файлы - аргументы. Это $ {bwa_at} Огромный список файлов? Если это код Python, то вам нужно что-то вроде

echo "${BWA_AT}" | cut

, если это действительно это список файлов, то вам нужно что-то вроде

echo "${BWA_AT}" | xargs cut

с необходимыми вариантами , в зависимости от сепаратора.

0
27.10.2015, 20:23
2 ответа

С awk :

awk 'FNR==NR{a[$1]=$2"\t"$3} FNR!=NR{split($2,b,"-"); $0=$0"\t"a[b[1]];print}' file1 file2
  • FNR == NR применяется к первому файлу file1 :
    • a [ $ 1] = $ 2 "\ t" $ 3 заполните массив a вторым и третьим полями и в качестве индекса используйте первое поле.
  • FNR! = NR применяется ко второму файлу file2 :
    • split ($ 2, b, "-") разделяет 2-е поле по адресу - .
    • $ 0 = $ 0 "\ t" a [b [1]] добавляет два значения в строку.
    • print печатает строку.

Вывод:

text1   ABC1-AB text2   text3   1   3
text2   ABC2-AB text1   4   3
text3   ABC1-CD text2   1   3
text4   ABC5-AB text3   text4
2
28.01.2020, 02:20

У меня та же проблема, и я попытался создать симблек из iptables в iptables-save , который был рекомендован на их вики-странице DD-WRT _ V24 _ .26 _ iptables-save , но это не сработало для меня.

Для решения этой проблемы был создан файл оболочки с содержимым /tmp/.ipt .

/jffs/bin/iptables-save :

#!/bin/sh
cat /tmp/.ipt

ПРИМЕЧАНИЕ: вики-страница ( DD-WRT _ V24 _ .26 _ iptables-save ) посвящена «Firewall Builder» - я не тестировал это решение с помощью «Firewall Builder».

-121--60862-

Я понял, что программа должна быть запущена как sudo, чтобы она могла получить доступ к порту... Надеюсь, это поможет кому-то в будущем.

ОТРЕДАКТИРОВАНО: программе c, которой я обладаю, требуется разрешение sudo для подключения сокета к порту UDP 53000 и отправки пакетов через этот порт.

-121--195218-

Тестирование с использованием BASH.

while read LINEFILE2
do
  printf "$LINEFILE2" >> File3
  while read LINEFILE1
  do
    read PATTERN ADDITIONS <<EOF
$LINEFILE1
EOF
    [ ! -z "$PATTERN" ] && [ ! -z $(echo "$LINEFILE2" | cut -f2 | grep "$PATTERN") ] && {
      printf "\t$ADDITIONS\n" >> File3
    }
  done < File1
done < File2

Если требуется найти образец внутри всей линии, а не только в столбце 2 можно получить команду cut из конструкции трубы.

2
28.01.2020, 02:20

Теги

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