Извлечение с использованием awk в определенном столбце

Ваша корневая оболочка идет от su , верно? Переменная окружения $XDG_RUNTIME_DIR наследуется от вашей пользовательской оболочки. Вы можете либо запустить экспорт XDG_RUNTIME_DIR="" перед aplay для очистки, либо использовать sudo -i вместо su, чтобы получить чистую окружающую среду.

2
19.03.2018, 07:55
2 ответа

Что касается первоначальной версии вопроса, я поставил "лайк" и -проголосовал за ответ Иниана и удалил этот, но теперь, когда вопрос изменился....

awk 'NR>1{if ($2~/^\*\*/) $2=foo;if ($3!~/^[[:digit:].]+$/) $3=foo; $1=$2=$3="";print}' file

Операторы ifдолжны помещать фиктивные значения во второй и третий столбцы, если второй равен **Neverили если третий не является IP-адресом, но приведет к ошибке ответа, если существуют другие необычные возможности.

Для удобства чтения давайте повторно -опубликуем один -вкладыш, так как он немного длинный...

awk 'NR > 1 {
  if ( $2 ~ /^\*\*/ ) $2=foo
  if ( $3 !~ /^[[:digit:].]+$/ ) $3=foo
  $1=$2=$3=""
  print }' file
0
27.01.2020, 21:55

Вы можете сделать это с помощью простой команды awkдля печати содержимого последнего столбца и использования нескольких пробелов в качестве разделителя полей. Поскольку разделителем по умолчанию в awkявляется одиночное белое пространство -, его использование непосредственно в последнем столбце приведет к разделению содержимого последнего столбца. Условие NR>обеспечивает пропуск первой строки при применении фактических действий, определенных для awk.

awk -F '[[:space:]][[:space:]]+' 'NR>1{print $NF}' file

или также используя sed, предполагая несколько пробелов между столбцами и слова, разделенные столбцами только в последнем столбце.

sed '1d;s/^.*  //' file

ОП, по-видимому, повторно -сформулировал вопрос, чтобы сбросить вывод команды столбца last, из которой они хотели получить последний вывод столбца.Поскольку сами промежуточные столбцы могут иметь пробелы, мы сопоставляем столбец, содержащий название дня, и печатаем оттуда до конца строки, т.е.

last | awk ' {
     for( i=1;i<=NF;i++ ) {
         if ( $i ~ /Mon|Tue|Wed|Thu|Fri|Sat|Sun/ ) {
             j = 0
             str = ""
             for ( j=i; j<=NF;j++ ) {
                 str = ( str ? (str FS $j):$j )
             }
             print str
             break
         }
     }
 }'
5
27.01.2020, 21:55

Теги

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