cat emp.csv | split -l 6000
создаст кучу маленьких файлов: в данном случае 6000 строк. По умолчанию это xaa
, xab
и так далее, но вы можете изменить это: см. справочную страницу для split
.
Измените 0
в скрипте ed
на $
. $
обращается к последней строке буфера редактирования.
$ { printf 'g?%s?m$\n' 008 006 004 002; echo 'wq'; } | ed -s file.txt
$ cat file.txt
005
003
110
069
245
009
007
008
006
004
002
Если вы хотите, чтобы они располагались в порядке, обратном (порядку, указанному в вопросе ), вам пришлось бы перевернуть список шаблонов.
$ { printf 'g?%s?m$\n' 002 004 006 008; echo 'wq'; } | ed -s file.txt
$ cat file.txt
005
003
110
069
245
009
007
002
004
006
008
Или, если уж на то пошло,
{ printf 'g?%s?m$\n' 008 006 004 002 | tac; echo 'wq'; } | ed -s file.txt
... если у вас установлено tac
из GNU coreutils. В некоторых системах (BSD )вы можете использовать tail -r
вместо tac
.
Храните линии в отдельных контейнерах в зависимости от того, нужно ли их переместить на юг или оставить на месте. Затем, когда все строки просмотрены таким образом, напечатайте их в нужном порядке.
$ perl -ne 'push @{/_00[2468]$/ ? \@A : \@B}, $_}{print @B, @A' input.txt
Вы также можете сделать это с помощью posix sed:
$ sed -ne '
/_00[2468]$/s//&/w data2468
//!p
$r data2468
' input.txt