Как перегруппировать строку одинаковой длины с помощью awk

SCP необходимо включить в кавычки один параметр целиком. 2 разных ответа передо мной частично верны,но правильный ответ

scp "macbook@192.168.0.3:/Users/macbook/desktop/John's folder/file" storage/folder

Обратите внимание, что первый параметр заключен в кавычки, а второй нет. -Если бы оба параметра были заключены в один экземпляр кавычек, как предполагает один из комментариев, /bin/scp вызывал бы его как один параметр и был бы ожидая другого параметра после этого.

scp "macbook@192.168.0.3:/Users/macbook/desktop/John's folder/file storage/folder"будет считан как отдельный параметр. Несмотря на то, что там есть пробел, двойные кавычки его избегают.

Наконец, размещение кавычек в середине параметра, такого как scp macbook@192.168.0.3:"/Users/macbook/desktop/John's folder/file" storage/folder, сокращает параметр вдвое и не имеет смысла для оболочки, поскольку user@host :/path/to/directory является одним полным параметром. Вы можете использовать его части, но вы не можете разрезать его пополам, иначе он будет рассматриваться как 2 разных параметра.

0
20.03.2020, 01:38
2 ответа

Это дает желаемый результат:

awk -F_ '
    {strr[length] = strr[length]"_"$2}
    length > max {max=length}
    END {
        for (i=1;i<max;i++) {if (strr[i]) print "\"" strr[i]"_\","}
        print "\"" strr[max]"_\""
    }' file

Строки длиной iдобавляются к strr[i]с начальным _. В конце мы просто перебираем существующие элементы strrи выводим их с помощью "<element>_",, за исключением последнего элемента, который не получает ,.

2
28.04.2021, 23:20
$ cat tst.awk
{
    lgth = length($0)
    sub(/_$/,"",strs[lgth])
    strs[lgth] = strs[lgth] $0
}
END {
    for (lgth in strs) {
        printf "%s\"%s\"", sep, strs[lgth]
        sep = "," ORS
    }
    print ""
}

$ awk -f tst.awk file
"_ah_ai_an_",
"_asn_",
"_errr_"
6
28.04.2021, 23:20

Теги

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