Nasıl satır # 5555 satır linux altında # 7777 alabilirsiniz 100000 satır içeren i dosya var.
Her şey için teşekkürler.
Nasıl satır # 5555 satır linux altında # 7777 alabilirsiniz 100000 satır içeren i dosya var.
Her şey için teşekkürler.
Yanıtlar:
sed '5555,7777!d' <filename>
Bu, dosyanın 5555-7777 satırlarını kapsamlı olarak yazdırır.
Dennis daha hızlı olması gerektiğini kabul ediyorum aşağıdakileri yayınladı:
sed '5555,7777p; 7778q' filename
Daha hızlı olması gerektiğine dair aşağıdaki kanıtlar:
$ n=1
$ while [[ n -le 100000 ]]; do echo $n >> sedtest2; n=$((n + 1)); done
$ strace -e trace=read -o sed1 sed '5555,7777!d' sedtest2
$ strace -e trace=read -o sed2 sed '5555,7777p; 7778q' sedtest2
$ wc -l sed1
149 sed1
$ wc -l sed2
14 sed1
Yalnızca Bash'te (eğlence için):
n=1
while read line; do
if [[ ($n -ge 5555) && ($n -le 7777) ]]; then
echo $line
elif [[ $n -gt 7777 ]]; then
break
fi
n=$(( $n + 1 ))
done < file
$n -gt 3
belki 7777 olmalısın? Ayrıca, if (( n >= 5555 ))
daha "doğal" görünümlü sayısal karşılaştırma operatörleri (ve dolar işareti bırakma yeteneği) için yapabilirsiniz. Ve yapabilirsin ((n++))
.
İşiniz bittiğinde bırakmak işleri hızlandırabilir:
sed -n '5555,7777p; 7778q' input_file
Sed seçeneği bir mysqldump dosyasında işe yaramadı, alıntı satır beslemeleri veya çok baytlı karakterlerin işlenmesi nedeniyle tahmin ediyorum. baş ve kuyruk ihtiyaç duyduğum grep ile aynı satır numaralarını kullanarak dilimleyin. $ J ile $ k arasındaki satırları almak için şunlara ihtiyacınız vardır:
x=$(( $k - $j + 1 ))
tail -n +$j filename | head -${x}