В этой статье я покажу вам несколько советов, как получить n-ю строку из файла с помощью командной строки.

Исходная статья: https://blog.petehouston.com/get-n-th-line-from-a-file/

Вместо того, чтобы использовать раздутый текстовый редактор только для чтения одной строки из файла, использование команды для запроса того, что мы хотим, является лучшим выбором.

Предполагая, что вход имеет следующее содержимое:

id,title,author,created_at
1,"Backup and restore MySQLDB","Pete Houston","2018-08-27 12:15:32"
2,"Quick guide to SQLite3","Pete Houston","2018-09-12 22:35:56"
3,"Migrate to MongoDB","Pete Houston","2018-10-01 03:48:18"

Это файл CSV, но вы можете использовать любой файл.

Допустим, мы хотим получить 2-ю строку из этого sample.csv. Каково ваше решение?

Вот несколько полезных команд.

1. Объединение head и tail

Это может быть первое, что приходит на ум, когда нам нужно иметь дело со строками из файла.

$ head -n2 sample.csv | tail -1
1,"Backup and restore MySQLDB","Pete Houston","2018-08-27 12:15:32"

Что он делает, так это захватывает первые 2 строки, а затем получает последнюю строку.

2. Использование sed

sed — очень мощная утилита, и вот как мы ее используем.

$ sed '2q;d' sample.csv
1,"Backup and restore MySQLDB","Pete Houston","2018-08-27 12:15:32"

Это выглядит довольно сложно понять, если вы никогда раньше не использовали sed.

По сути, sed будет перебирать каждую строку и удалять ее в выводе, но немедленно остановится, когда достигнет 2-й строки.

Nq:означает остановку немедленно при достижении N-й строки.

d: означает удаление текущей строки.

Итак, sed '12q;d' input_file выведет 12-ю строку из input_file.

3. Еще head и tail

Это довольно интересно.

$ tail -n+2 sample.csv | head -1
1,"Backup and restore MySQLDB","Pete Houston","2018-08-27 12:15:32"

Это не tail -n2, а tail -n+2.

Опция -n+NUM означает получение строк, начиная с NUM-й строки из файла. Следовательно, мы можем использовать head для получения первой отображаемой строки.

Некоторые говорят, что эта команда работает быстрее, чем другие. Но это выглядит в зависимости от реализации tail.

Вывод

Существует множество способов получить n-ю строку из файла, это зависит от того, что мы знаем. Это довольно интересный вопрос, который многие задают в Интернете.

Этот пост полностью вдохновлен этот вопрос на StackOverflow.

Здравствуйте, я инженер-программист, следите за моим ежедневным блогом по адресу https://blog.peteouston.com