Драйверы видеовыхода, скомпилированные в Вашу версию mplayer, могут быть просмотрены путем выполнения
mplayer -vo help
Относительно которого необходимо выбрать, когда, часть этого будет очевидна из вывода справки (для тех, которые нацелены на определенные видеокарты [mga, s3fb, и т.д.], или выходные форматы [aa, png, и т.д.]). Некоторые являются устаревшими (я не думаю, что VIDIX пошел куда угодно, или GGI). Другие, я не могу помочь Вам с. Я использую xv
когда я могу и отступать к x11
. Другие несколько специализированы поэтому, если я не нахожу причину использовать один, я привычка.
Вот решение в awk
который использует 4 массива для подсчета этих 4 сведений, Вам нужно. Вывод от awk
затем питается в column
который выравнивает столбцы приятно. (Обратите внимание, что в этом, возможно, также выполнили awk
использование printf
.)
awk 'NR>1 {
id[$1]++
if($6 ~ /Pass/) pass[$1]++
if($8 ~ /1/) he[$1]++
if($9 ~ /1/) ho[$1]++
}
END {
print "Id CountId Countpass CountHe CountHO"
for(i in id)
print i" "id[i]" "(pass[i]?pass[i]:0)" "(he[i]?he[i]:0)" "(ho[i]?ho[i]:0)
}' input.txt | column -t
Вывод:
Id CountId Countpass CountHe CountHO
cm|371443198 1 1 1 0
cm|371443199 3 3 2 1
cm|367079424 2 2 0 2
Один способ использовать perl
принятие infile
имеет содержание Вашего вопроса (идентификаторы не будут обязательно в том же порядке в выводе, потому что я использую хеш для сохранения их):
Содержание script.pl
:
use strict;
use warnings;
my (%data);
while ( <> ) {
## Omit header.
next if $. == 1;
## Remove last '\n'.
chomp;
## Split line in spaces.
my @f = split;
## If this ID exists, get previously values and add values of this
## line to them. Otherwise, begin to count now.
my @counts = exists $data{ $f[0] } ? @{ $data{ $f[0] } } : ();
$counts[0]++;
$counts[1]++ if substr( $f[5], 0, 4 ) eq q|Pass|;
$counts[2] += $f[7];
$counts[3] += $f[8];
splice @{ $data{ $f[0] } }, 0, @{ $data{ $f[0] } }, @counts;
}
## Format output.
my $print_format = qq|%-15s %-10s %-12s %-10s %-10s\n|;
## Print header.
printf $print_format, qw|Id CountId CountPass CountHe CountHo|;
## For every ID saved in the hash print acumulated values.
for my $id ( keys %data ) {
printf $print_format, $id, @{ $data{ $id } };
}
Выполните его как:
perl script.pl infile
Со следующим выводом:
Id CountId CountPass CountHe CountHo
cm|371443198 1 1 1 0
cm|371443199 3 3 2 1
cm|367079424 2 2 0 2
{
фигурная скобка:if(!id[$1]) nr[ln++]=$1
... (2) Удаляют строкуfor(i in id)
и замените его:for( n=0;n<ln;n++ ) { i=nr[n]
... (3) Изменение закрытие}
фигурная скобка к}}
сбалансировать дополнительную фигурную скобку представило в (2) - (+1 btw) – Peter.O 06.07.2012, 02:53