Если вам действительно нужно сделать это с помощью awk, то, возможно, используйте массив, проиндексированный номером записи по модулю 3
awk '{i = (NR-1)%3; a[i] = a[i]? a[i] OFS $0 : $0} END{for(i=0;i<3;i++) print a[i]}' file
R1C1 R1C2 R1C3
R2C1 R2C2 R2C3
R3C1 R3C2 R3C3
Если доступна утилитаrs
(r e s hape ), то
rs 0 3 < file | rs -T
или
paste - - - < file | rs -c -T
Это связано с порядком, в котором различные типы расширений выполняются в оболочке. На справочной странице bash
говорится:
Expansion is performed on the command line after it has been split into words. There are seven kinds of expansion performed: brace expansion, tilde expansion, parameter and variable expansion, command substitution, arithmetic expansion, word splitting, and pathname expansion.
Замена ~
— это расширение с помощью тильды, а ваш $(...)
— замена команды. Теперь вы видите, что после выполнения подстановки команд замены тильды больше нет. С реальными абсолютными путями (, начинающимися с корня файловой системы /
), это сработает.
Но вы можете выполнить расширение самостоятельно с помощьюsed
:
vim $(sed "s_~_${HOME}_g" filelist)