En la salida ps aux
, hay una columna que especifica STAT, en su lista debe haber un proceso con R
STAT, este es el proceso que se ejecuta en la CPU
в awk нельзя читать вперед, нужно запоминать шаблон
файл awk (u.awk ниже)
/STUDENT/ { li=NR;}
NR == li+2 { mark[li]=$0 }
NR == li+4 { pos[li]=$0 }
END { for (m in mark) printf "%s %s\n",mark[m],pos[m] ;}
где
/STUDENT/ { li=NR;}
запомнить строку начала записи NR == li+2 { mark[li]=$0 }
когда текущая строка равна +2, запомните отметку (аналогично для позиции)при запуске с вашими образцами данных (я удаляю пустые строки, корректирую +2/+4, если они присутствуют в реальном файле ), это дает
awk -f u.awk liste-1.txt
XYZ 20 I 5 TTT ANON B
ABC 40 I 5 TTT ANON A
Генерация заголовка опущена.
Если вы предварительно -разбили данные на записи, можно обойтись печатью соответствующих полей:
# Pre-splitting
sed '/^STUDENT/ { 1!s/^/\n/; }' infile |
# Reorder the record:
awk -v RS= -v FS='\n' '
NR == 1 { print $2, $4, $6 }
{ print $3, $5, $7 }' |
# Pretty-print columns
column -t
Выход:
NAME MARKS STD RANK SCHOOL TEACHER GRADE POSITION
XYZ 20 I 5 TTT ANON B 5
ABC 40 I 5 TTT ANON A 5
awk '
BEGIN { OFS="\t"; maxLines=7 }
{ lineNr=(NR-1) % maxLines + 1; $1=$1; lines[lineNr]=$0 }
NR == maxLines { print lines[2], lines[4], lines[6] }
lineNr == maxLines { print lines[3], lines[5], lines[7] }
' file
NAME MARKS STD RANK SCHOOL TEACHER GRADE POSITION
XYZ 20 I 5 TTT ANON B 5
ABC 40 I 5 TTT ANON A 5
Включены конструкции Gnu sed и расширенный режим регулярных выражений:
$ sed -nEe '
1,6{
N;7!s/^/\n/;7!D;h
s/(.*)\n(.*)\n(.*)\n(.*)\n(.*)\n(.*)\n(.*)/\2\t\4\t\6/p
ba
}
/STUDENT/!{H;$!d;:a;g;}
s/(.*)\n(.*)\n(.*)\n(.*)\n(.*)\n(.*)\n(.*)/\3\t\5\t\7/p
' file.txt
NAME MARKS STD RANK SCHOOL TEACHER GRADE POSITION
XYZ 20 I 5 TTT ANON B 5
ABC 40 I 5 TTT ANON A 5
Tested with below script and it worked fine
STEP1:
header=`sed '/STUDENT/d' r.txt |sed -n '1~2p'| sort | uniq| sed "N;s/\n/ /g"| sed "N;s/\n/ /g"`
count=`sed '/STUDENT/d' o.txt|wc -l`
sed -i '/STUDENT/d' o.txt
STEP2:
for ((i=1;i<=$count;i++)); do j=$(($i+5)); sed -n ""$i","$j"p" o.txt| sed -n '2~2p'|sed -r "s/\s+/ /g"|sed "N;s/\n/ /g"|sed "N;s/\n/ /g"; i=$j; done| awk -v header="$header" 'BEGIN{print header}{print $0}'| sed "s/ /\t/g"