bash — разделить, но использовать только определенные числа

#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 представляет собой номер строки