, я понял это - приложение, которое я недавно установил, по-видимому, ввел синтаксическую ошибку в мой файл ~/.bashrc
. Это исправило проблему.
Это делает то, что вы хотите:
#!/bin/bash
while read line1; do
f21=$(echo $line1 | cut -d" " -f1)
f22=$(echo $line1 | cut -d" " -f2)
#echo "outside: $f21 -- $f22"
while read line2; do
f11=$(echo $line2 | cut -d" " -f1)
f12=$(echo $line2 | cut -d" " -f2)
#echo "inside: $f11 -- $f12"
if [ "$f22" == "$f12" ]; then
echo "$f21 is dependent on $f11 for file $f22"
fi
done < file1
done < file2
./parsy.bash
"BRGTEST-244" is dependent on "BRGTEST-242" for file a.txt
"BRGTEST-244" is dependent on "BRGTEST-240" for file a.txt
"BRGTEST-221" is dependent on "BRGTEST-219" for file e.txt
Я оставил в этом скрипте 2 echo...
команды, которые вы можете раскомментировать, чтобы визуально увидеть, как этот скрипт проходит через другие 2 файла. Когда вы раскомментируете их, вы увидите этот вывод:
$./parsy.bash | head -10
outside: "BRGTEST-244" -- a.txt
inside: "BRGTEST-242" -- a.txt
"BRGTEST-244" is dependent on "BRGTEST-242" for file a.txt
inside: "BRGTEST-240" -- a.txt
"BRGTEST-244" is dependent on "BRGTEST-240" for file a.txt
inside: "BRGTEST-219" -- e.txt
outside: "BRGTEST-244" -- b.txt
inside: "BRGTEST-242" -- a.txt
inside: "BRGTEST-240" -- a.txt
inside: "BRGTEST-219" -- e.txt
Ключевым моментом в этом является признание того, что вам нужно пройтись по содержимому file2
и посмотреть, соответствует ли каждый элемент на основе ваших условий тому, что находится в file1
. Для этого вам нужно вложить цикл внутрь другого цикла.
Когда у вас есть эта структура и данные проанализированы соответствующим образом, можно использовать простой оператор if
, чтобы определить, совпадают ли 2-й столбец из file1
и file2
. Если да, мы echo
сообщение, используя части, которые мы собрали.
С GNU Awk (gawk ), который поддерживает многомерные массивы, логика выглядит так:
gawk '
NR==FNR {
a[$2][++c[$2]] = $1; next
}
$2 in a {
for (i in a[$2])
print $1 " is dependent on " a[$2][i] " for " $2
}
' File1 File2
"BRGTEST-244" is dependent on "BRGTEST-242" for a.txt
"BRGTEST-244" is dependent on "BRGTEST-240" for a.txt
"BRGTEST-221" is dependent on "BRGTEST-219" for e.txt
Если нужно убрать и кавычки:
gawk '
NR==FNR {
a[$2][++c[$2]] = substr($1,2,length($1)-2); next
}
$2 in a {
for (i in a[$2])
print substr($1,2,length($1)-2) " is dependent on " a[$2][i] " for " $2
}
' File1 File2
BRGTEST-244 is dependent on BRGTEST-242 for a.txt
BRGTEST-244 is dependent on BRGTEST-240 for a.txt
BRGTEST-221 is dependent on BRGTEST-219 for e.txt