Вывод слов в строке в обратном порядке с помощью awk

Так что в конце концов я понял это сам. Для тех, кто сталкивается с этим, убедитесь, что при запуске cryptsetup status /dev/mapper/<device>тип LUKS1, а не PLAIN. Похоже, что установщик Ubuntu неправильно настроен по умолчанию, поэтому стандартные команды LUKS не работали на устройстве. Поскольку это был обмен, я смог правильно восстановить шифрование, и теперь все работает гладко.

3
24.06.2020, 09:28
3 ответа

Использование полоса:

perl -lane 'print join " ", reverse @F' file
4
18.03.2021, 23:25

Вариант, который меняет местами поля в текущей записи перед ее печатью (, будет использовать текущее значение OFSдля разделителя полей вывода, если это установлено в командной строке (с помощью-v)или в другом месте кода awk).

$ awk '{ for (i = 1; i < NF/2; ++i) { t = $i; $i = $(NF-i+1); $(NF-i+1) = t } }; 1' file
cat dog pen apple

Только код awkс явным printвместо сокращенного 1условия, вызывающего действие по умолчанию:

{
    for (i = 1; i < NF/2; ++i) {
        # swap $i and $(NF-i+1)
        t = $i
        $i = $(NF-i+1)
        $(NF-i+1) = t
    }

    print
}
2
18.03.2021, 23:25

Использование GNU awkи сохранение исходного интервала между полями:

gawk -v FPAT='[[:space:]]+|[^[:space:]]+' -v ORS= '
   {for (i = NF; i > 0; i--) print $i; print RT}'

На вход " foo bar baz"выводится "baz bar foo ".

Это предполагает, что ввод является правильно закодированным текстом в локали.

Имейте в виду, что если ввод использует разделители строк MS -DOS, вы получите строки, начинающиеся с символов возврата каретки (, которым, возможно, предшествует больше пробелов ). Возможно, вам придется пройти -v RS='\r?\n', чтобы разместить их.

1
18.03.2021, 23:25

Теги

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