используйте sed для соединения строк из таблицы

Да, этого можно добиться, привязав ярлык к:

env GDK_BACKEND=x11 tilix --quake

Ссылки:

Из версии 1.7.7:

...the other major change is that support for quake mode in Wayland has been dropped. It's turned out to be have far too many issues to support due to the limitations of Wayland around window positioning. Users who want to use quake mode in Wayland can do so by forcing the usage of the X11 backend with tilix via the environment variable GDK_BACKEND=x11.

И из gnunn1/tilix #1314:

I've had a look at resolving these issues and frankly I just don't think it's possible to have a perfect experience under Wayland without getting into writing Wayland extensions or something else equally exotic

3
01.05.2020, 14:54
4 ответа

Вернулся и прочитал, какие могут быть различия между нашими версиями sed и re -и написал его с нуля. Надеюсь, это сработает:

:r
    $!N
    y:+:,:
    /\n,/{
        s:^\([^,]\{1,\},[^,]\{1,\}\)\([^\n]\{1,\}\)\n,\([^ \n]\{1,\}\).*$:\1 \3\2:
        br
    }
    $!P
    $!D

Выход:

TYPE,DESCRIPTION,PRIORITY,DATE
1,text1 text2,HIGH,Aug 15
2,text,LOW,Aug 11
3,text,LOW,Aug 11
4,text1 text2 text3,HIGH,Aug 15
3
28.04.2021, 23:16
awk '
    BEGIN{OFS=FS="+"}
    {sub(/[[:blank:]]+$/,"")}  #Removes trailing blanks
    NF==4{print line;line=$0}
    NF==2{x=$2;$0=line;$2=$2" "x;line=$0}
    END{print line}
' file | column -ts "+"

Основная идея заключается в том, что если NF==2, то поместите второе поле $2во второе поле предыдущей строки. Итак, что происходит

1+text1+HIGH+Aug 15 #Puts this in "line" variable
+text2              #Transfer 2nd field to "line" second field
# Resulting in...
1+text1 text2+High+Aug 15

columnудаляет +из вывода, чтобы создать этот окончательный вывод:

TYPE  DESCRIPTION        PRIORITY  DATE
1     text1 text2        HIGH      Aug 15
2     text               LOW       Aug 11
3     text               LOW       Aug 11
4     text1 text2 text3  HIGH      Aug 15
4
28.04.2021, 23:16
perl -0pe 'while(s/(.*?)\+(.*?)\+(.*)\n\+(.*)/$1+$2 $4+$3/g){}' file
  • perl -0-хлебать весь ввод
  • s/(.*?)\+(.*?)\+(.*)\n\+(.*)/$1+$2 $4+$3/gпреобразует A+B+...C\n+Dв A+B D+...C, пока это возможно.
-1
28.04.2021, 23:16

Создание «независимого от поля»awk

tac file | awk 'BEGIN{FS="+"}
    {flds=(NF>flds)?NF:flds;for (i=1; i<=NF; i++) {f=(length($i)>0)?gensub(/ +$/,"","g",$i)" ":"";fld[i]=f fld[i]}}
    $1>0{for (i=1; i<=flds; i++) printf fld[i]"+"; printf "\n"; delete fld}' | 
    tac | column -ts "+"

TYPE   DESCRIPTION         PRIORITY   DATE     
1      text1 text2         HIGH       Aug 15   
2      text                LOW        Aug 11   
3      text                LOW        Aug 11   
4      text1 text2 text3   HIGH       Aug 15  

Прохождение

Переверните файл, чтобы знать, что пора печатать, когда $1 не пуст, и установитеFS

tac file | awk 'BEGIN{FS="+"}

Ведите подсчет максимального количества flds, циклически перебирайте поля, обрезая их и проверяя наличие пробелов, загружайте их в массив по полю для их объединения

    {flds=(NF>flds)?NF:flds;for (i=1; i<=NF; i++) {f=(length($i)>0)?gensub(/ +$/,"","g",$i)" ":"";fld[i]=f fld[i]}}

Если $1не является -пустым, выведите строку и сбросьте массив

    $1>0{for (i=1; i<=flds; i++) printf fld[i]"+"; printf "\n"; delete fld}' | 

Пропустите через tac, чтобы перевернуть его, и используйте column, чтобы приукрасить его

    tac | column -ts "+"

Редактировать

На самом деле не понравился второй цикл, останавливающийся на gensubкаждом поле, когда вы можете ударить по нему sedмолотком, так как он конвейерный, и что тесты могут быть упрощены. Чувствовал себя неэлегантно.

Итак, вот версия для гольфа , которая мне кажется лучше:

tac file | awk 'BEGIN{FS="+"}
    {flds=(NF>flds)?NF:flds;
        for (i=1; i<=NF; i++) {fld[i]=$i" "fld[i];
        if ($1) printf fld[i]"+"}}
    $1{ printf "\n"; delete fld}' |
    sed -E "s/  +/ /g" | tac | column -ts "+" 
4
28.04.2021, 23:16

Теги

Похожие вопросы