Что такое менеджер рабочего стола Xfce, если это не Thunar? (Что такое эквивалент nemo-desktop в Xfce)?

Аннотация:

  1. Квадрат.....:awk -F, '{printf(NR==1?$NR:" "$NR)}END{printf("\n")}' file
  2. Прямоугольный:

    awk -F, ' NR==1{printf($1);next}
              {printf(" "$(NR>NF?NF:NR))}END{printf("\n")}
            ' file`
    
  3. Другие диагонали:

    awk -F, -vdiag=9 -vdir=-1 '
        {d=(NR-1)*(dir>0?1:-1)+1+diag;d=(d<1?1:d);d=(d>NF?NF:d)}
        {printf("%s%s",NR==1?"":" ",$d)}
        END {printf("\n")}
     ' file
    
  4. Posix, который выбирает номер диагонали и направление /против \. (код длинный, прочтите его в конце этого поста ).


Детали

Квадратная матрица

С awk наиболее элегантным решением является:

$  awk -F, '{print $NR}' file
1
7
3
9
5

Чтобы получить однострочный вывод, вы можете сделать (с пробелом в конце):

$ awk -F, -v ORS=" " '{print $NR}' file; echo
1 7 3 9 5 

Если вы должны иметь выходные данные без пробелов в конце:

$  awk -F, '{printf(NR==1?$NR:" "$NR)}END{printf("\n")}' file
1 7 3 9 5

Прямоугольный

Для файла, например, с этим:

$ cat file
1,2,3,4,5
6,7,8,9,0
1,2,3,4,5
6,7,8,9,0
1,2,3,4,5
a,b,c,d,e
f,g,h,i,j
k,l,m,n,o
p,q,r,s,t
u,v,w,x,y

Приведенное выше решение будет печатать пробелы:

$ awk -F, '{printf(NR==1?$NR:" "$NR)}END{printf("|\n")}' file
1 7 3 9 5     |

Если в этом случае вы хотите остановить обработку, то проверка того, превышает ли номер записи количество полей, может быть решением (если количество полей изменяется для каждой строки, это может быть не так. правильное решение):

$ awk -F, 'NR>NF{exit}{printf(NR==1?$NR:" "$NR)}END{printf("|\n")}' infile
1 7 3 9 5|

Если вы хотите напечатать последнее поле в любой строке, где NR > NF:

$ awk -F, 'NR==1{printf($1);next}{printf(" "$(NR>NF?NF:NR))}END{printf("|\n")}' file
1 7 3 9 5 e j o t y|

Другие диагонали

Если необходима диагональ, отличная от «главной диагонали», мы можем указать, что, установив для переменной diag значение, отличное от 0 (0 является главной диагональю в этом коде):

$ awk -F, -vdiag=3   '   {d=NR+diag;d=(d<1?1:d);d=(d>NF?NF:d)}
                         {printf("%s%s",NR==1?"":" ",$d)}
                         END {printf("\n")}
                     ' file
4 0 5 0 5 e j o t y

Обратите внимание, что значение diag может быть отрицательным:

 $ awk -F, -vdiag=-3 '   {d=NR+diag;d=(d<1?1:d);d=(d>NF?NF:d)}
                         {printf("%s%s",NR==1?"":" ",$d)}
                         END {printf("\n")}
                     ' infile
 1 6 1 6 2 c i o t y

И диагональ могла бы быть как /вместо \с большим количеством математики:

$ awk -F, -vdiag=4 -vdir=-1 '
    {d=(NR-1)*(dir>0?1:-1)+1+diag;d=(d<1?1:d);d=(d>NF?NF:d)}
    {printf("%s%s",NR==1?"":" ",$d)}
    END {printf("\n")}
' file
5 9 3 7 1 a f k p u

$ awk -F, -vdiag=9 -vdir=-1 '
    {d=(NR-1)*(dir>0?1:-1)+1+diag;d=(d<1?1:d);d=(d>NF?NF:d)}
    {printf("%s%s",NR==1?"":" ",$d)}
    END {printf("\n")}
' infile
5 0 5 0 5 e i m q u

Posix оболочка

С другим входным файлом:

$ printf '%s\n' {1..6}{1..5} 7{1..3} | pr -ta -5 -s',' | tee inputfile
11,12,13,14,15
21,22,23,24,25
31,32,33,34,35
41,42,43,44,45
51,52,53,54,55
61,62,63,64,65
71,72,73

Эквивалентом awk в Posix-совместимой оболочке может быть:

diagPosix(){ diag=${1%%[!0-9+-]*} dir=$(((${2:-1}>0)?1:-1)) n=0 a=""
             while read x ; do
#                echo "testing $n $x"
                 IFS=',' eval 'set -- $x'  # Place values in pos parms.
                 a=$(( diag + n*dir    ))  # calculate position a
                 b=$(( (a<0)?0:a       ))  # low limit is zero (0)
                 d=$(( (b>$#-1)?$#-1:b ))  # upper limit is ($#-1)
#                echo "a=$a b=$b d=$d #=$# n=$n"
                 shift $d                  # remove leading parms
                 printf '%s' "$s" "$1"     # print parm (and an space)
                 s=" "                     # Next loop will have space.
                 n=$((n+1))                # In which line are we?
             done <"${3:-inputfile}"
             echo 
           }
diagPosix "$@"

, что с учетом введенных выше данных,будет работать следующим образом:

$./script 0 1 inputfile
11 22 33 44 55 65 73

$./script -2 1 inputfile
11 21 31 42 53 64 73

$./script 4 -1 inputfile
15 24 33 42 51 61 71

Код был протестирован в некоторых оболочках и работает хорошо.

ash             : 11 22 33 44 55 65 73
/usr/bin/yash   : 11 22 33 44 55 65 73
y2sh            : 11 22 33 44 55 65 73
dash            : 11 22 33 44 55 65 73
zsh/sh          : 11 22 33 44 55 65 73
b203sh          : 11 22 33 44 55 65 73
b204sh          : 11 22 33 44 55 65 73
b205sh          : 11 22 33 44 55 65 73
b30sh           : 11 22 33 44 55 65 73
b32sh           : 11 22 33 44 55 65 73
b41sh           : 11 22 33 44 55 65 73
b42sh           : 11 22 33 44 55 65 73
b43sh           : 11 22 33 44 55 65 73
b44sh           : 11 22 33 44 55 65 73
lksh            : 11 22 33 44 55 65 73
mksh            : 11 22 33 44 55 65 73
ksh93           : 11 22 33 44 55 65 73
attsh           : 11 22 33 44 55 65 73
zsh/ksh         : 11 22 33 44 55 65 73

Это не удается для zsh (не в эмуляции )как потому, что zsh не разбивается по умолчанию, так и потому, что нумерация массива начинается с 1 (, а не с 0 ). Это было проверено в csh и tcsh, но это не работает.
И это не предполагается там работать (не используйте csh для скриптов! ).

Решения, работающие снизу вверх, должны легко создаваться с помощью tac на входе.

1
25.09.2019, 12:36
1 ответ

По запросу мой комментарий размещен как ответ:xfdesktopdocs.xfce.org/xfce/xfdesktop/start

К сожалению, я не располагаю никакими непосредственно относящимися к делу подробностями, так как я никогда не пытался заменить xfdesktopфункциональностью обработки рабочего стола файлового менеджера или чем-либо еще.

Я провел краткий поиск replace "xfdesktop"на DuckDuckGo и нашел (четыре страницы в глубине результатов поиска )страницу, свидетельствующую о том, что xfdesktopможетбыть заменены. См. раздел на странице Советы, хитрости и инструкции | Xfce Wiki под названием «Как использовать ROX для управления рабочим столом, чтобы иметь значки на рабочем столе». Не знаю, поможет ли это, но это так.

3
27.01.2020, 23:30

Теги

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