Сортировка записей полем назад (не от начала до конца)

Это обычно упоминается как "перенаправление портов". Вот отрывок из официальной документации:

  1. Войдите в меню Firewall, выберите NAT, затем нажмите на вкладку Port Forward.
  2. Нажмите + значок наверху или нижняя часть экрана.
  3. Выберите Interface для порта вперед (вероятная WAN) и в случае необходимости, выберите виртуальный IP-адрес от Внешнего выпадающего Адреса.
  4. Введите свой переданный порт в поле (поля) диапазона Внешнего порта
  5. Введите внутренний IP-адрес, в который требуется отправить тот порт в поле NAT IP.
  6. Заполните локальный порт, если он отличается от внешнего порта.
  7. Проверьте Автодобавление, что брандмауэр управляет флажком
  8. Нажмите Save, который возвратит Вас экрану Port Forward NAT, показывая Вам все записи NAT.
  9. Наконец, нажмите Apply Changes - ожидают несколько секунд и теста.

Источник: http://doc.pfsense.org/index.php/How_can_I_forward_ports_with_pfSense%3F

Если у Вас все еще есть проблемы, заставляя это работать правильно, посмотрите Порт, Вперед Диагностирующий документ.

2
20.01.2014, 04:27
4 ответа

С другой стороны, Вы могли отсортировать со стороны первого поля, которое запускается при смещении 8:

$ sort -k1.8 < file
[a2--0-boot]       /dev/sda2        179M
[b2--1-boot]       /dev/sdb2       1008M
[a8--2-home]       /dev/sda8        2.0G
[b11-2-home]       /dev/sdb11       2.0G
[a9--1-var]        /dev/sda9        996M
[b14-2-var]        /dev/sdb14       2.0G

Если Ваша система имеет a rev команда, можно сделать:

$ rev < file | sort -k3 | rev
[b11-2-home]       /dev/sdb11       2.0G
[a8--2-home]       /dev/sda8        2.0G
[a9--1-var]        /dev/sda9        996M
[b14-2-var]        /dev/sdb14       2.0G
[a2--0-boot]       /dev/sda2        179M
[b2--1-boot]       /dev/sdb2       1008M

Только инвертировать первое поле:

rev1() {
  sed -e 's/^/\
/;:1' -e 's/\(.*\n\)\([^[:blank:]]\)/\2\1/;t1' -e 's/\n//'
}
rev1 < file | sort | rev1
2
27.01.2020, 22:00
  • 1
    Но я не хочу инвертировать поле, только сортировать его в обратном порядке. –  Ray Andrews 20.01.2014, 17:56
  • 2
    @rayandrews, Вы заметите rev и rev1 сделаны на обеих сторонах sort. Это просто инвертируется для sort и инвертированный снова для возвращения к оригиналу. –  Stéphane Chazelas 20.01.2014, 18:17
  • 3
    Вполне так, пропустил это. Мне жаль, что поле дисплея не было более широким. –  Ray Andrews 20.01.2014, 20:36

Используйте версию для возвращения строк. Используйте awk для печати третьего столбца сначала. Используйте вид для вида, затем используйте сокращение для удаления первого столбца снова и версии использования для возвращения строк снова:

tweedleburg:~ # rev test | awk '{printf $3;printf " ";print}'| sort|cut -d " " -f 2-|rev
[a8--2-home]       /dev/sda8        2.0G  
[b11-2-home]       /dev/sdb11       2.0G  
[a9--1-var]        /dev/sda9        996M  
[b14-2-var]        /dev/sdb14       2.0G  
[a2--0-boot]       /dev/sda2        179M  
[b2--1-boot]       /dev/sdb2       1008M 

http://www.linuxintro.org/wiki/Shell_scripting_tutorial

1
27.01.2020, 22:00

Решение для Perl:

# !/usr/bin/perl

while (<>) {
    push @r, [ $_, split /\s+/, $_ ];
}

map { print $_->[0] }
sort { (reverse $a->[1]) cmp (reverse $b->[1]) }  
@r;

Данные считываются с stdin в цикле с условием продолжения и готовятся к Schwartzian, Преобразовывают.
Последние 3 строки являются одной инструкцией.

1
27.01.2020, 22:00
  • 1
    Yikes! жемчуг, вещь, я старался избегать ;-) –  Ray Andrews 20.01.2014, 06:22
  • 2
    @rayandrews: хороший объясненный в Эффективном Perl, используемом за 0,01$ –   20.01.2014, 13:39
  • 3
    Tch. Мое плохое. +1 для обращения к Schwartzian Преобразовывают, хотя на самом деле это является ненужным (и следовательно) неэффективный здесь, потому что это требует O (N) предварительная обработка данных (Ваш цикл с условием продолжения). Было бы лучше пропустить это и вид на основе группы получения или подстроки. –  goldilocks 20.01.2014, 13:44
  • 4
    То, что я имел в виду, было, лучше избежать, чтобы Schwartzian преобразовали, если Вам не нужен он. Конечно, Вам действительно нужно while циклично выполнитесь здесь так или иначе для чтения в, таким образом, я являюсь теоретическим, но притворяюсь, что массив существует ранее: sort { (substr $a, 7) cmp (substr $b, 7) }. –  goldilocks 20.01.2014, 14:34
  • 5
    Самым эффективным был бы вид вставки. Iduno, если вид использует его. Однако все языки имеют некоторые ограничения. –   20.01.2014, 20:27

Спасибо парни, но я думаю, что мой является лучшим:

cat inputfile | rev | sort -k7 |rev

Больной и скрученный, но это работает просто великолепно. Tho интересно, почему это не работает:

tac inputfile | sort -k7 | rev
0
27.01.2020, 22:00

Теги

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