Как изменить этот код `printf`, чтобы изменить его действие?

cat emp.csv | split -l 6000

создаст кучу маленьких файлов: в данном случае 6000 строк. По умолчанию это xaa, xab и так далее, но вы можете изменить это: см. справочную страницу для split.

0
21.05.2019, 00:59
2 ответа

Измените 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.

3
28.01.2020, 02:22

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

$ 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
0
28.01.2020, 02:22

Теги

Похожие вопросы