#bash #split
#bash #разделить
Вопрос:
допустим, я хочу разделить большой файл на файлы, в которых есть, например, 50 строк
split <file> -d -l 50 prefix
Однако, как мне заставить это игнорировать первую n
и последнюю m
строки в <file>
?
Ответ №1:
Использовать head
и tail
:
tail -n N [file] | head -n -M | split -d -l 50
Пример ( lines
это текстовый файл с 10 строками, каждая с последовательным номером):
[bart@localhost playground]$ tail -n 3 lines | head -n -2
3
4
5
6
7
8
Комментарии:
1. Это не позволяет передавать префикс команде split, не так ли?
2. Нет, как ни странно, это не так.
Ответ №2:
Вы можете использовать awk
поверх файла, который разделен, предоставив необходимый диапазон строк.
awk -v lineStart=2 -v lineEnd=8 'NR>=lineStart amp;amp; NR<=lineEnd' splitted-file
Например.
$ cat line
1
2
3
4
5
6
7
8
9
10
awk
С диапазоном от 3-8, предоставляя
$ awk -v lineStart=3 -v lineEnd=8 'NR>=lineStart amp;amp; NR<=lineEnd' file
3
4
5
6
7
8
Ответ №3:
Если у n
и m
есть начальный и конечный номер строки для печати, вы можете сделать это
с sed
sed -n $n,${m}p file
-n
избегайте печати по умолчанию всех строк. p
печатается только строка, соответствующая диапазону, указанному $n,${m}
С awk
awk "NR>$n amp;amp; NR<$m" file
где NR
представляет собой номер строки