Linux :Как получить имя устройства для третьего раздела заданного блочного устройства

Я предполагаю, что ваш конвейер является частью скрипта, который принимает один аргумент (количество возвращаемых строк ).

Расширение параметра ${$1:-5}недействительно и должно быть записано как ${1:-5}, чтобы оно расширялось до 5, если $1пусто или не установлено.

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

awk '{ print length(), NR, $0 }' unix1.txt | 
sort -rn |
head -n "${1:-5}" |
sed 's/[^ ]* //' |
sort -n

Чтобы немного упростить (замените sedнаcut)и чтобы сделать вывод более «табличным», мы можем вывести промежуточный результат из awkс табуляцией в качестве разделителя вывода:

awk -v OFS="\t" '{ print length(), NR, $0 }' unix1.txt | 
sort -rn |
head -n ${1:-5} |
cut -f 2- |
sort -n

Для данных данныхэто выведет следующее для количества строк вывода по умолчанию:

2       kbjkbkbbnbnmbnmnmmnbmnbmjbjkb
4       asjdsakdbakjsdbasbkj
5       asjdsakdbakjsdbasbkj
16      ffdsdfggdgdgdfgdfgdf112233
17      qwertyuiopsdfghjklxcvbnm,fghjk

Чтобы обработать несколько файлов в вашем скрипте, я бы предложил зациклиться на заданных именах файлов. Может что-то вроде

#!/bin/sh

n=${1:-5}
shift

for name do
    if [ "$#" -gt 1 ]; then
        printf 'File: %s\n' "$name"
    fi

    awk -v OFS="\t" '{ print length(), NR, $0 }' "$name" | 
    sort -rn |
    head -n "$n"
    cut -f 2- |
    sort -n
done

Этот сценарий будет вызываться как

./script.sh 10 file1 file2 file3 etc

Обратите внимание, что это требует , чтобы первый аргумент всегда был числом (и чтобы в сценарии не было ничегоbash-определенного, поэтому я использую /bin/shв качестве интерпретатора )]. Чтобы использовать правильные параметры командной строки для присвоения номера сценарию, например. как

./script -n 10 file1 file2

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

1
29.07.2021, 18:42
0 ответов

Теги

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