Saya bertanya-tanya apakah ada cara sederhana untuk beroperasi pada jalur tertentu dengan nomor baris yang sudah ditentukan sebelumnya.
Katakanlah saya ingin menampilkan 1, 7, 14 dan 16 baris file, saya bisa lakukan
sed -n '1p;7p;14p;16p' input_file
tetapi ini menjadi lebih rumit ketika operasi tidak hanya mencetak, dan saya tidak ingin menulis perintah panjang yang sama 4 kali (dan ya, saya tahu saya bisa membangun perintah sed lama ini dengan mengganti variabel bash yang sama 4 kali, tetapi itu tidak cukup ideal ...), yaitu
sed -n '1{long_command};7{long_command};14{long_command};16{long_command}' input_file
Apakah ada cara untuk melakukan operasi pada baris spesifik file saya ini? Saya mengharapkan sesuatu seperti,
sed -n '1,7,14,16p'
yang pasti tidak akan berfungsi dalam bentuk saat ini.
Bantuan apa pun akan dihargai. "Tidak, itu tidak mungkin." dengan penjelasan juga merupakan jawaban yang akan saya terima.
awk
Jawaban:
Anda dapat menggunakan cabang:
(perhatikan bahwa Anda juga dapat menambahkan beberapa
20,25b1
rentang garis, atau/re/b1
untuk memasukkan garis yang cocok denganre
).Atau Anda bisa menggunakan
awk
:Atau menggunakan hash:
(atau
BEGIN{lines[1]lines[7]lines[14]lines[16]}
jika tidak terlalu banyak)sumber
Cukup batalkan pilihan Anda dan hapus:
sumber
Varian pertama:
Anda dapat menggunakan trik ini:
Pengujian
Keluaran
Varian kedua:
Pada awalnya, auxiliary
sed
digunakan untuk memfilter hanya baris-baris yang diperlukan dari file, kemudian baris-baris ini disalurkan ke mainsed
dengan perintah panjang.sumber