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

Да. Использование сценария bash:

#!/bin/bash
groupsize=0
groupcnt=0
cat unix_StackExchange_question.txt | while read fsize fname
do
        [ "$groupsize" == "0" ] && echo "Group : GROUP_$groupcnt"
        echo -en "\t $fname\n"
        ((groupsize+=$fsize))
        #cp $fname GROUP_$groupcnt
        if [ "$groupsize" -gt "5000000" ]
        then
            ((groupcnt++))
            groupsize=0
        fi
done
0
01.01.2019, 17:17
3 ответа

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

lsof -F t | awk '/^t/ {print substr($0,2)}'

См. раздел OUTPUT FOR OTHER PROGRAMSв man lsof

.

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

awk -v field="TYPE" 'NR==1 {c = index($0,field)} {print substr($0,c,length(field))}'
1
28.01.2020, 02:41

С помощью awkвы можете сделать это:

lsof | awk '{print $5}'

Будет распечатан столбец номер 5.

0
28.01.2020, 02:41

Выберите нужный столбец в зависимости от количества столбцов в строке:

lsof | perl -ane 'printf "%s\n",(@F>9) ? $F[5] : $F[4]'

Perl нумерует элементы, начиная с нуля. Переключатель -aauto -разбивает входную строку (строку )на поля F, индексированные с нуля.

0
28.01.2020, 02:41

Теги

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