Вы можете попробовать использовать SED
:
sed -rn ':a;/^([^~]*~){13}[^~]*$/!{N;s/\n//;ba};p' yourfile.tsv
Что он делает
, скрипт имеет три части, разделенные ;
:
: A
определяет ярлык, которую мы можем отрасить до / ^ ([^ ~] * ~) {13} [~ ~] * $ /! {n; s / \ n //; ba}
поиск полной колонны
/ ^ ([^ ~] * ~) {13} [~ ~] * $ /
ищет строку с ровно 14 полей (0 или более вхождений чего-либо, что не является ~
), разделенный 13 вхождений ~
. !
инвертирует результат поиска (если не найден, то ...) {n; s / \ n //; ba}
блок, который выполняется, если столбец не завершен
N
Читает в другой строке S / \ N //
Удаляет новую строку между двумя линиями BA
ветвями (B) к нашей ранее определенной метке (A) P
печатает полный столбец Я добился этого, настроив escape-коды, чтобы следить за ними в моем .vimrc
.
Я все еще хотел бы лучше понять, как все это работает, и почему последовательность, отправляемая tmux, отличается от той, что отправляется за пределами tmux, но это заставило все работать:
if &term =~ "screen"
set <F13>=[1;2P
set <F14>=[1;2Q
set <F15>=[1;2R
set <F16>=[1;2S
set <F17>=[1;5P
set <F18>=[1;5Q
set <F19>=[1;5R
set <F20>=[1;5A
set <F21>=[1;5B
elseif &term =~ "xterm"
set <F13>=O2P
set <F14>=O2Q
set <F15>=O2R
set <F16>=O2S
set <F17>=O5P
set <F18>=O5Q
set <F19>=O5R
set <F20>=[1;5A
set <F21>=[1;5B
endif
" use some unused function key codes to
" make special key combos work in terminal
map <F13> <C-CR>
map! <F13> <C-CR>
map <F14> <S-CR>
map! <F14> <S-CR>
map <F15> <C-Space>
map! <F15> <C-Space>
map <F16> <S-Space>
map! <F16> <S-Space>
map <F17> <C-BS>
map! <F17> <C-BS>
map <F18> <M-Tab>
map! <F18> <M-Tab>
map <F19> <M-S-Tab>
map! <F19> <M-S-Tab>
map <F20> <C-Up>
map! <F20> <C-Up>
map <F21> <C-Down>
map! <F21> <C-Down>