Считайте и управляйте переменными столбца awk или sed - PullRequest
0 голосов
/ 19 марта 2012

Я пытаюсь отредактировать элемент массива, чтобы преобразовать формат # 1: # 2, # 3, ... так, чтобы # 1 показывал имя файла, а # 2- # n показывал их полные имена файлов, и иметь количество # 2- # n.

<РЕДАКТИРОВАТЬ>
12: 12,13 означает:
Для записи $ {names} «12» существуют записи в $ {names}, так что записи 12 и 13 являются дубликатами

Содержимое $ {merge}

key: 0 value: 12:12,13
key: 1 value: 18:18,19

Некоторое содержимое $ {name} (только последняя часть $ {path}

key: 12 value: j.smith
key: 13 value: j.smith
key: 18 value: test
key: 19 value: test

Некоторое содержимое $ {path}

key: 12 value: ./testDir/first/j.smith
key: 13 value: ./testDir/j.smith
key: 18 value: ./testDir/second/test
key: 19 value: ./testDir/third/test

Моя попытка:

for ix in "${merge[@]}"
do
        # Remove "#:" from "#:#,#" string and pass #,# into awk
        echo ${ix} | sed s/[0-9]*:// | awk -v name="${name[*]}" '
        {
        FS=",";
        print "\File: ",$name," Number of Matches:",NF;
            for (ix=0; ix<NF; ix++)
            {
                print $ix,": ",$path[$ix];
            };
        print "END"; }'
done


Это то, что я получаю

File:  12,13  Number of Matches: 1
12,13 :  12,13
END

File:  18,19  Number of Matches: 1
18,19 :  18,19
END



Что я пытаюсь получить:

Файл: j.smith
Количество матчей: 2
./testDir/first/j.smith
./testDir/j.smith

Файл: тест
Количество матчей: 2
./testDir/second/test
./testDir/third/test

1 Ответ

1 голос
/ 19 марта 2012
merge=([0]="12:12,13" [1]="18:18,19")
name=([12]="j.smith" [13]="j.smith" [18]="test" [19]="test")
path=([12]="./testDir/first/j.smith" [13]="./testDir/j.smith" [18]="./testDir/second/test" [19]="./testDir/third/test")

for ix in "${merge[@]}"
do
    a=${ix%%:*}
    b=(`echo ${ix##*:} | sed 's/,/ /g'`)
    n=${name[a]}
    echo
    echo "File: $n"
    echo "Number of Matches: ${#b[@]}"
    for i in ${b[@]}
    do
        echo ${path[$i]}
    done
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...