У меня нет sha_cipher
на моем ПК, но давайте представим, что ваша команда оболочки была tr 'a-z' 'A-Z'
вместо sha_cipher
. Взгляд (ввод через табуляцию):
$ cat file
2018-09-14 AlexOrange 15 HTTP 86914702 1 1 NO 79634 48249 127883 LEFT MODEL1 SUBTYPE255 A536 RS SO 94 Elixir RTT
2018-09-14 Joe Bloggs 15 HTTP 86914702 1 1 NO 79634 48249 127883 LEFT MODEL1 SUBTYPE255 A536 RS SO 94 Elixir RTT
2018-09-14 Sue Everyone 15 HTTP 86914702 1 1 NO 79634 48249 127883 LEFT MODEL1 SUBTYPE255 A536 RS SO 94 Elixir RTT
$ cut -f2 file | tr 'a-z' 'A-Z'
ALEXORANGE
JOE BLOGGS
SUE EVERYONE
$ cut -f2 file | tr 'a-z' 'A-Z' |
awk 'BEGIN{FS=OFS="\t"} NR==FNR{a[NR]=$0;next} {print $1, a[FNR], $19}' - file
2018-09-14 ALEXORANGE RTT
2018-09-14 JOE BLOGGS RTT
2018-09-14 SUE EVERYONE RTT
Это будет на несколько порядков эффективнее, чем запуск awk подоболочки для вызова команды оболочки один раз для каждой строки ввода, при условии, что sha_cipher
может работать с несколькими значениями в конвейерном вводе, такими как tr
и большинством других текстов. -обработка команд оболочки может (вырезать, sed, grep, sort, uniq и т.д ...).
Для проверки синхронизации я создал файл с 5 миллионами строк в том же формате, что и предоставленная вами строка ввода образца, и содержащий случайные строки во 2-м поле с помощью:
$ cat file
2018-09-14 AlexOrange 15 HTTP 86914702 1 1 NO 79634 48249 127883 LEFT MODEL1 SUBTYPE255 A536 RS SO 94 Elixir RTT
$ tr -dc '[:alnum:]' </dev/urandom | fold -w 6 | head -5000000 |
awk 'BEGIN{FS=OFS="\t"} NR==FNR{orig=$0;next} {x=$0; $0=orig; $2=x}1' file - > file5m
$ wc -l file5m
5000000 file5m
$ head -3 file5m
2018-09-14 fLSynM 15 HTTP 86914702 1 1 NO 79634 48249 127883 LEFT MODEL1 SUBTYPE255 A536 RS SO 94 Elixir RTT
2018-09-14 mxWzLF 15 HTTP 86914702 1 1 NO 79634 48249 127883 LEFT MODEL1 SUBTYPE255 A536 RS SO 94 Elixir RTT
2018-09-14 EKJYF8 15 HTTP 86914702 1 1 NO 79634 48249 127883 LEFT MODEL1 SUBTYPE255 A536 RS SO 94 Elixir RTT
и вот результат запуска предложенного решения на нем:
$ time cut -f2 file5m | tr 'a-z' 'A-Z' | awk 'BEGIN{FS=OFS="\t"} NR==FNR{a[NR]=$0;next} {print $1, a[FNR], $19}' - file5m > outFile5m
real 0m40.892s
user 0m42.196s
sys 0m0.980s
$ wc -l outFile5m
5000000 outFile5m
$ head -3 outFile5m
2018-09-14 FLSYNM RTT
2018-09-14 MXWZLF RTT
2018-09-14 EKJYF8 RTT
Так что, если sha_cipher
не намного менее эффективен, чем tr 'a-z' 'A-Z'
(если это так, то вам просто не повезло), тогда я ожидаю, что вышеупомянутое должно работать достаточно быстро для вас (то есть, оно должно работать менее чем за минуту, а чем несколько часов).