Υπάρχει ένας "κανονικός" τρόπος για να γίνει αυτό; Έχω χρησιμοποιήσει το head -n | tail -1
που κάνει το κόλπο, αλλά αναρωτιόμουν αν υπάρχει κάποιο εργαλείο Bash που να εξάγει συγκεκριμένα μια γραμμή (ή μια σειρά γραμμών) από ένα αρχείο.
Με τον όρο "κανονικό" εννοώ ένα πρόγραμμα του οποίου η κύρια λειτουργία είναι να το κάνει αυτό.
head
και pipe με tail
θα είναι αργή για ένα τεράστιο αρχείο. Θα πρότεινα το sed
ως εξής:
sed 'NUMq;d' file
Όπου NUM
είναι ο αριθμός της γραμμής που θέλετε να εκτυπώσετε- έτσι, για παράδειγμα, sed '10q;d' file
για να εκτυπώσετε τη 10η γραμμή του file
.
Επεξήγηση:
Το NUMq
θα τερματίσει αμέσως όταν ο αριθμός της γραμμής είναι NUM
.
Το d
θα διαγράψει τη γραμμή αντί να την εκτυπώσει- αυτό εμποδίζεται στην τελευταία γραμμή επειδή το q
προκαλεί την παράλειψη του υπόλοιπου σεναρίου κατά την έξοδο.
Αν έχετε το NUM
σε μια μεταβλητή, θα πρέπει να χρησιμοποιήσετε διπλά εισαγωγικά αντί για μονά:
sed "${NUM}q;d" file
sed -n '2p' < file.txt
θα εκτυπώσει τη 2η γραμμή
sed -n '2011p' < file.txt
2011η γραμμή
sed -n '10,33p' < file.txt
γραμμή 10 έως γραμμή 33
sed -n '1p;3p' < file.txt
1η και 3η γραμμή
και ούτω καθεξής...
Για την προσθήκη γραμμών με sed, μπορείτε να ελέγξετε αυτό:
Μπορείτε επίσης να χρησιμοποιήσετε την Perl γι' αυτό:
perl -wnl -e '$.== NUM && print && exit;' some.file