Да. Использование сценария 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
Вы можете использовать параметр -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))}'
С помощью awk
вы можете сделать это:
lsof | awk '{print $5}'
Будет распечатан столбец номер 5.
Выберите нужный столбец в зависимости от количества столбцов в строке:
lsof | perl -ane 'printf "%s\n",(@F>9) ? $F[5] : $F[4]'
Perl нумерует элементы, начиная с нуля. Переключатель -a
auto -разбивает входную строку (строку )на поля F
, индексированные с нуля.