Saya punya file saya yang berisi 100000 baris bagaimana saya bisa mendapatkan baris dari baris # 5555 ke baris # 7777 di linux.
Terima kasih untuk segalanya.
Saya punya file saya yang berisi 100000 baris bagaimana saya bisa mendapatkan baris dari baris # 5555 ke baris # 7777 di linux.
Terima kasih untuk segalanya.
Jawaban:
sed '5555,7777!d' <filename>
Ini akan mencetak baris 5555-7777 dari file secara inklusif.
Dennis Diposting di bawah ini yang saya setuju harus lebih cepat:
sed '5555,7777p; 7778q' filename
Bukti berikut bahwa itu harus lebih cepat:
$ 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
Hanya di Bash (untuk bersenang-senang):
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
harus 7777 mungkin? Juga, Anda dapat melakukannya if (( n >= 5555 ))
untuk operator perbandingan numerik yang tampak lebih "alami" (dan kemampuan untuk meninggalkan tanda dolar). Dan kamu bisa melakukannya ((n++))
.
Berhenti saat Anda selesai dapat mempercepat:
sed -n '5555,7777p; 7778q' input_file
Saya menemukan bahwa opsi sed tidak bekerja pada file mysqldump, saya menduga karena menangani umpan garis atau karakter multibyte yang dikutip. kepala dan ekor mengirisnya menggunakan nomor baris yang sama dengan grep yang saya butuhkan. Untuk mendapatkan baris $ j hingga $ k, Anda perlu:
x=$(( $k - $j + 1 ))
tail -n +$j filename | head -${x}