Стеклянная переменная в Bash

Вам вообще не нужно использовать awk

while read i
do
    grep ${i#*_} bigfile.txt > ${i%%_*}
done <aaa

Для GNU sed

sed 's/\([^_]\+\)_\(.*\)/sed "\/\2\/!d" bigfile.txt >"\1"/e' aaa

Для awk (если хотите)

awk -F_ '
    NR == FNR{
        A[$2] = $1
        next
    }
    {
        for(a in A)
            if($0 ~ a)
                print > A[a]
    }
    ' aaa bigfile.txt

Для больших файлов вам нужно будет использовать

                print >> A[a]
                close(A[a])
0
19.01.2019, 23:50
1 ответ

I need it to test what is the distro-oriented document-root dir (based on the dir's existence)

Из этих двух вариантов вы можете использовать [ -d dir ], чтобы увидеть, существуют ли они:

if [ -d /var/www/html ]; then
    drt=/var/www/html;
elif [ -d /srv/http ]; then
    drt=/srv/http
else
    echo "No HTTP server root directory found"
    exit 1
fi

или с петлей:

drt=
for d in /var/www/html /srv/http; do
    if [ -d "$d" ]; then
        drt=$d;
        break 
    fi
done
if [ -z "$drt" ]; then
    echo "No HTTP server root directory found"
    exit 1
fi 

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

2
28.01.2020, 02:30

Теги

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