Вы можете сделать это с помощью sed. В приведенном ниже коде используется gnu sed, но его можно легко сделать совместимым с posix.
sed -Ee '
$!{
s/$/|/
N
s/[[:blank:]]+//g
H;s/.*//;x;D
}
s/$/|/
G;H;g
y/\n_/_\n/
:xdup
s/_((([^_|]+[|]){2})(([^_|]+[|]){2}))_(.*_)?\4\2_/_\1_\6/
txdup
s/^_//;s/_$//
y/\n_/_\n/
' input.csv
По мере приближения часа пик объясню позже
Результаты:
10|Name1|20|Name2|
20|Name2|30|Name3|
40|Name4|30|Name3|
Когда вы это сделали, должен был быть создан файл antigen.zsh
в том месте, где вы выполнили эту команду. Вы можете просто удалить его с помощью rm antigen.zsh
.