Saya tertarik untuk mengetahui nomor baris dari baris terpanjang dari sebuah file.
Misalnya, jika saya memiliki file dengan konten berikut:
lalala
tatatata
abracadabra
mu mu mu
bagaimana saya bisa menulis skrip bash yang akan memberi saya output seperti ini 3 -> abracadabra
:?
command-line
bash
scripts
pengguna214965
sumber
sumber
^
) dan ujungnya ($
) memiliki tepat n karakter (.{n}
). Maka dia hanya perlu menemukan n: untuk ini dia menggunakan GNU-isme, "wc -L filename" (perhatikan bahwa ini bukan posix) yang mengembalikan panjang baris nama file terpanjang. Jadi dia menangkap garis yang memiliki panjang terpanjang.$(cmd)
diganti dengan output daricmd
.-C 3
ke opsi grep untuk mendapatkan beberapa baris sebelum dan sesudah untuk konteksAnda dapat menggunakan
awk
untuk mencetak panjang setiap baris (length()
) dan nomor baris (NR
), lalu membalikkan (-r
)sort
hasilnya dengan nomor (-n
):Untuk hanya menampilkan baris pertama:
sumber
wc -L
, saya tidak tahu tentang argumen itu. Ini memang sangat berguna.AO (N) dapat dicapai dengan perl satu liner:
penggunaan (di mana machin adalah nama file)
atau
atau (kurang jelas tapi lebih pendek)
sumber
O (n) Untuk mesin, misalnya OpenWRT, di mana perl tidak tersedia, @ awk @ versi mungkin berguna.
atau python:
sumber
Jawaban Radu sangat memadai dan disukai, meskipun jika Anda menginginkan solusi yang lebih eksplisit dan berbasis shell, maka Anda dapat menggunakan skrip berikut:
Pemakaian:
./find_longest.sh input.txt
Contoh:
sumber