Изменение порядка данных столбцов в алфавитном порядке

Вы не можете ограничить пользователя root.

Для всех остальных с этим справятся стандартные разрешения. Возможность удаления файла или каталога зависит от доступа на запись к родительскому каталогу.

2
07.03.2020, 12:31
3 ответа

С GNU awk для сортировки _в:

$ cat tst.awk
BEGIN {
    FS=OFS=","
}
{
    sub(/\r$/,"")
    print sort($0)
}

function sort(inStr,    arr,idx,sep,outStr) {
    PROCINFO["sorted_in"] = "@val_str_asc"
    split(inStr,arr)
    for (idx in arr) {
        outStr = outStr sep arr[idx]
        sep = OFS
    }
    return outStr
}

$ awk -f tst.awk file
a,b,c
d,e,k

или с любым awk, но будет выполняться намного медленнее, так как порождает оболочку для вызова UNIX sortдля каждой строки ввода:

$ cat tst.awk
BEGIN {
    FS=OFS=","
}
{
    sub(/\r$/,"")
    print sort($0)
}

function sort(inStr,    cmd,line,sep,outStr) {
    gsub(/,/,"\n",inStr)
    cmd = "printf \047%s\n\047 \047" inStr "\047 | sort"
    while ( (cmd | getline line) > 0 ) {
        outStr = outStr sep line
        sep = OFS
    }
    close(cmd)
    return outStr
}

$ awk -f tst.awk file
a,b,c
d,e,k

Ошибка sub(/\r$/,"")возникает из-за того, что у вас есть окончания строк DOS в опубликованном образце входных данных, но нет в опубликованном ожидаемом выводе.

1
28.04.2021, 23:21

Если у вас все в порядке сperl:

$ perl -F, -lane 'print join ",", sort @F' ip.txt
a,b,c
d,e,k

-F,указывает, что строка ввода должна быть разделена с помощью ,в качестве разделителя, а результат доступен через массив @F

sort @Fбудет сортировать в алфавитном порядке, и результирующий массив будет объединен joinс использованием ,в качестве разделителя


СGNU awk

$ awk 'BEGIN{PROCINFO["sorted_in"] = "@val_str_asc"}
       {s = ""; c=0; split($0,a,",");
        for(k in a) s = c++ ? s "," a[k] : a[k];
        print s}' ip.txt
a,b,c
d,e,k

См. руководство gawk :Использование предопределенных порядков сканирования массивов для получения подробной информации об упорядочении массивов, использованном выше

3
28.04.2021, 23:21
perl -nlE 'say join ",", sort split ","'   file.txt

Пояснение:

            for each line like "r,d,a":
 "r,d,a"
    ↓          split ","  it
("r","d","a")
    ↓          sort       it
("a","d","r")
    ↓          join ","   it
 "a,d,r"
               say it
0
28.04.2021, 23:21

Теги

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