Aqui está o meu script, eu estou procurando a primeira linha onde o primeiro campo está correspondendo ao meu número. As linhas são classificadas de acordo com o primeiro campo.
Eu uso o dd para verificar a primeira linha de blocos de 128K, depois eu pulo para o bloco e faço uma pesquisa.
Melhorar a eficiência é o arquivo é mais de 1M.
Qualquer comentário ou correção é apreciado!
#!/bin/bash
search=$1;
f=$2;
bs=128;
max=$( echo $(du $f | cut -f1)" / $bs" | bc );
block=$max;
for i in $(seq 0 $max); do
n=$(dd bs=${bs}K skip=$i if=$f 2> /dev/null| head -2 | tail -1 | cut -f1)
if [ $n -gt $search ]; then
block='expr $i - 1'
break;
fi
done;
dd bs=${bs}K skip=$block if=$f 2> /dev/null| tail -n +2 | awk -v search="$search" '$1==search{print;exit 1;};$1>search{exit 1;};';
* EDITAR * **
grep é muito mais rápido e ack ainda melhor