Как сократить (выбирают) поле из текстовой строки, рассчитывающей от конца?

Они отрывок Debian /etc/default/rsync (Fedora, вероятно, не отклоняет слишком много),

# run rsyncd at a nice level?
# ...
RSYNC_NICE=''

# run rsyncd with ionice?
# ...
# RSYNC_IONICE='-c3'

заставляет меня думать что *NICE значения только влияют rsyncd демон. Взгляд на /etc/init.d/rsync, мы находим

if [ -s $RSYNC_DEFAULTS_FILE ]; then
    . $RSYNC_DEFAULTS_FILE
    case "x$RSYNC_ENABLE" in
        xtrue|xfalse)   ;;
        xinetd)         exit 0
# ... the next lines examine the *NICE variables...

т.е. если rsync используется с inetd, *NICE значения не имеют значения вообще.

Вы могли попытаться заменить rsync строка в inetd.conf,

rsync   stream  tcp     nowait  root   /usr/bin/rsync rsyncd --daemon
                                       ^^^^^^^^^^^^^^

с некоторой командной строкой, устанавливающей Ваш [io]nice значения, я предполагаю.

Царапина редактирования, которые длятся комментарий, Вы используете xinetd и таким образом, если Вы хотите попробовать его, должны измениться rsync команда в отрезанном Вы включали:

service rsync
{
...
    server          = /usr/bin/rsync
...
}

Edit2, Судящий по этому, существует a xinetd объект конфигурации называют nice для правильности команды:

nice    Changes the server priority like the nice command does.

Таким образом, Вы могли попробовать комбинацию установки nice=19 в /etc/xinetd.d/rsync и предварительное ожидание server команда с некоторыми ionice звоните, например. ionice -c3.

(Я не уверен, работает ли это, все же. Но если это не делает, можно все еще работать rsyncd как демон и позволяют /etc/init.d сценарий заботится обо всем.)

33
15.02.2013, 00:26
3 ответа

Инвертируйте вход прежде и после cut с rev:

<infile rev | cut -d, -f2 | rev

Вывод:

d
i
n
53
27.01.2020, 19:37
  • 1
    у меня есть много маленьких отрывков в моей папке мусорного ведра. rcut для точно этого: #!/bin/bash газуют | сокращение "$" | –  John Allsup 16.01.2017, 17:07
  • 2
    Это слишком плохо cut не может взять отрицательные полевые индексы (как Python). –  Keith Devens 09.04.2018, 07:55

Попытайтесь делать это с :

awk -F, '{print $(NF-1)}' file.txt

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

perl -F, -lane 'print $F[-2]' file.txt

Или использование (благодарит manatwork):

ruby -F, -lane 'print $F[-2]' file.txt

Или использование bash (спасибо manatwork):

while IFS=, read -ra d; do echo "${d[-2]}"; done < file.txt

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

cat file.txt |
python -c $'import sys\nfor line in sys.stdin:\tprint(line.split(",")[-2])'
10
27.01.2020, 19:37
  • 1
    bash не нуждается в зафиксированном количестве столбцов для этого: while IFS=, read -ra d; do echo "${d[-2]}"; done < file.txt. –  manatwork 13.02.2013, 17:03
  • 2
    BTW, Ваше третье решение также работает, если Вы изменяетесь perl с ruby. –  manatwork 13.02.2013, 17:08
  • 3
    Спасибо, ruby добавленный, bash отредактированный. –  Gilles Quenot 13.02.2013, 17:39
  • 4
    Если 4-е поле может запуститься с - или (в зависимости от среды, оболочки, или как оболочка была скомпилирована), может содержать символы обратной косой черты, затем echo не опция. Почему необходимо подставитьcatenate file.txt ни с чем прежде, чем подать его к python!?. Вам нужно read -A вместо read -a в ksh93 и zsh. Отрицательные нижние индексы работают в zsh но только в последних версиях ksh93 и bash. В более старых версиях можно использовать ${d: -2:1} –  Stéphane Chazelas 13.02.2013, 18:01
  • 5
    @StephaneChazelas, я думаю, что Вы имеете в виду ${d[@]: -2:1} в Вашем последнем предложении. –  manatwork 15.02.2013, 10:17

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

sed -E 's/^([^,]*,)*([^,]*)(,[^,]*){1}$/\2/' infile

Выход:

d
i
n

Пояснение

  • ([^,]*,)*соответствует любому количеству символов запятой, отличных от -, за которыми следует запятая, т. е. любому количеству столбцов.
  • ([^,]*)соответствует столбцу.
  • (,[^,]*){1}соответствует одному столбцу в конце, если вы измените квантификатор {1}на {2}, он будет соответствовать третьему столбцу с конца и т. д.
0
27.01.2020, 19:37

Теги

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