Como você está usando o "split" para separar seus arquivos por número de linhas, então processe-os separadamente para arquivos diferentes (eu acho), você pode fazer vários comandos "awk", cada um processando apenas parte do arquivo baseado no arquivo. número da linha:
$ cut -f3,4,5,6 original.tsv | awk 'BEGIN { FS="\t" }; (NR < 50000){ print $2"\t"$1"\t"$3"\t"$4 }' > abridged01.tsv
$ cut -f3,4,5,6 original.tsv | awk 'BEGIN { FS="\t" }; ((NR >= 50000) && (NR < 100000)){ print $2"\t"$1"\t"$3"\t"$4 }' > abridged02.tsv
$ cut -f3,4,5,6 original.tsv | awk 'BEGIN { FS="\t" }; ((NR >= 100000) && (NR < 150000)){ print $2"\t"$1"\t"$3"\t"$4 }' > abridged03.tsv
NR é uma variável interna para "awk" que contém o número da linha atual. Cada comando processaria apenas as linhas em seu intervalo. MAS , eles também passam pelas outras linhas, porque precisam contá-las. Tenho certeza que não vai ajudar você, porque você provavelmente vai cair no gargalo do IO. Mas você terá vários processos, permitindo que você use várias CPUs, se é isso que você quer. ; -)
Agora, SE você tem todas as linhas com o mesmo comprimento em bytes, você certamente pode fazer uma paralelização real. Nesse caso, você usará "dd" para extrair a parte exata de cada processo "awk". Você faria algo semelhante a:
dd if=original.tsv bs=30 count=50000 skip=0 | cut -f3,4,5,6 | awk 'BEGIN { FS="\t" }; { print $2"\t"$1"\t"$3"\t"$4 }' > abridged01.tsv
dd if=original.tsv bs=30 count=50000 skip=50000 | cut -f3,4,5,6 | awk 'BEGIN { FS="\t" }; { print $2"\t"$1"\t"$3"\t"$4 }' > abridged02.tsv
dd if=original.tsv bs=30 count=50000 skip=100000 | cut -f3,4,5,6 | awk 'BEGIN { FS="\t" }; { print $2"\t"$1"\t"$3"\t"$4 }' > abridged03.tsv
Onde 30 é o número de bytes em cada linha. Se suas linhas não são todas do mesmo tamanho em bytes (o que é mais provável) mas você sabe o byte exato onde seu bloco de linhas começa e termina, você ainda pode fazê-lo usando o dd. Estude seus parâmetros. Finalmente, se você não sabe onde os blocos começam e terminam, você pode encontrá-los com um comando extra awk. Mas isso adiciona uma leitura extra completa no seu arquivo. A menos que você processe seu arquivo original.tsv várias vezes de maneiras diferentes, você certamente gastará mais tempo pré-processando (calculando os bytes onde os blocos de linha começam e terminam) e depois processando (o que provavelmente terá um pequeno ganho porque você certamente ter um gargalo de IO) do que se você simplesmente usasse a solução que já conhece.
De qualquer forma, agora você tem informações e opções. ;-) Boa sorte! (y)