Karena Anda menggunakan "split" untuk memisahkan file Anda dengan jumlah baris, kemudian memprosesnya secara terpisah menghasilkan file yang berbeda (saya kira), Anda bisa melakukan beberapa perintah "awk" yang masing-masing hanya memproses bagian file Anda berdasarkan nomor baris:
$ 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 adalah variabel internal untuk "awk" yang berisi nomor baris saat ini. Setiap perintah hanya akan memproses garis dalam jangkauan mereka. TAPI , mereka semua akan melewati jalur lain juga, karena mereka perlu menghitungnya. Saya cukup yakin itu tidak akan membantu Anda, karena Anda kemungkinan besar akan jatuh dalam kemacetan IO. Tetapi Anda akan memiliki banyak proses, yang memungkinkan Anda untuk menggunakan banyak CPU, jika itu yang Anda inginkan. ;-)
Sekarang, JIKA Anda memiliki semua baris dengan panjang yang sama dalam byte, Anda pasti dapat melakukan paralelisasi nyata. Dalam hal ini, Anda akan menggunakan "dd" untuk mengekstrak porsi yang tepat untuk setiap proses "awk". Anda akan melakukan sesuatu yang mirip dengan:
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
Di mana 30 adalah jumlah byte di setiap baris.
Jika baris Anda tidak semua ukurannya sama dalam byte (yang merupakan kemungkinan terbesar) tapi Anda tahu byte yang tepat di mana blok garis Anda mulai dan berakhir, Anda masih bisa melakukannya menggunakan dd. Pelajari parameternya. Akhirnya, jika Anda tidak tahu di mana blok mulai dan berakhir, Anda dapat menemukannya dengan perintah awk tambahan. Tapi itu menambahkan pembacaan ekstra lengkap dalam file Anda. Kecuali jika Anda akan memproses file original.tsv Anda beberapa kali dengan cara yang berbeda, Anda tentu akan menghabiskan lebih banyak waktu pra-pemrosesan (menghitung byte di mana blok baris dimulai dan berakhir) dan kemudian memproses (yang mungkin akan memiliki keuntungan kecil karena Anda tentu akan memiliki bottleneck IO) daripada jika Anda hanya menggunakan solusi yang sudah Anda ketahui.
Bagaimanapun, sekarang Anda memiliki informasi dan opsi. ;-) Semoga berhasil! (y)