$ awk -F '|' 'BEGIN { OFS=FS } { split($3, a, ","); $3 = a[1]; $4 = a[2]; print }' file
122|abc |ds|we ||wrqg
145|dw |ett|335 ||nxd
166|rotl|qqqp|eoepepe||ge
776|gge |022 |||pp
039|pot |011a |||lot
Что я здесь делаю, так это то, что разделяю 3-е поле запятыми. Это назначает биты разделения -в массиве a
как отдельные элементы массива. Затем я устанавливаю 3-е поле на первый бит, а 4-е поле на второй бит(a[1]
и a[2]
соответственно ).
Это предполагает, что 3-е исходное поле всегда содержит только одну запятую (или вообще не содержит запятой ). Если он содержит более одной запятой, вы потеряете все данные, идущие после второй запятой.
Благодаря ответу @Frédéric Loyer мне удалось получить более важную информацию. Мы можем использовать следующий любой из следующих сценариев, чтобы увидеть поведение, похожее на scp.
> safe () (stty -echo; read password; stty echo)
> safe &
или просто
> (stty -echo; read password; stty echo)
В конечном счете, потенциальные проблемы (безопасности и прочие )не являются специфическими для scp, а связаны с плохим взаимодействием между fg
и настройками эха оболочки. Их можно включить/отключить вручную с помощью stty -echo/echo
соответственно. Это позволяет нам проверять конкретное поведение в разных системах без необходимости использования нескольких хостов, соединения ssh и т. д.
zsh на MacOS
> safe () (stty -echo; read password; stty echo)
> safe &
[1] 12345
>
[1] + suspended (tty output) safe
> fg
[1] + continued safe
stty: tcsetattr: Interrupted system call
im Getting The Same Issue(macOS zsh now)
>
Bash на RHEL и Ubuntu еще хуже
> (stty -echo; read password; stty echo) &
[1] 12345
> fg
( stty -echo; read password; stty echo )
[1]+ Stopped ( stty -echo; read password; stty echo )
> fg
( stty -echo; read password; stty echo )
VisiblePassword!!!
>
Он становится полностью невосприимчивым после первого fg. Пришлось сделать ctrl+z и еще один fg.