Что вы имеете в виду Установить эти переменные ?Являются ли эти переменные среды?В Awk переменные, которые начинаются со знака доллара и являются числовыми, зарезервированы для AWK.Это значения полей для каждой строки.Например:
test.txt =
this is line one
this is line two
this is line three
Команда awk '{print $4}' test.txt
выведет четвертое поле:
$ awk '{print $4}' test.txt
one
two
three
$ awk '{print $3}' test.txt
line
line
line
Как вы можете видеть: они не обязательно должны быть set .Они автоматически устанавливаются с помощью Awk.
Если вы хотите установить переменные окружения, вы можете использовать -v
параметр
awk -v search="foo" '{
if (search = $1) {
print "Found your string in record " NR
}'
. В приведенном выше примере search
является переменной Awkэто установлено равным foo
.
Поскольку Awk является языком программирования, иногда проще увидеть, что происходит, правильно отформатировав вашу программу:
awk -F'|' '{
if($1 in a) {
print "duplicate found:" $2 " AND " a[$1]
}
else {
a[$1] = $2
}
}' dump.txt
Программа принимаеткаждая строка.Каждая строка состоит из двух частей, разделенных |
.Похоже, что первая часть в ключе, а вторая часть - это данные.Я создал текстовый файл, который выглядит следующим образом:
This is a|test
That is a|line
who moans for|anchovies
whom moans for|anchovies
This is a|test again
Первая и последняя строки должны отображаться как дубликаты
Я взял вашу программу и добавил несколько строк отладки.Это поможет мне отследить, где оно находится в вашей программе:
awk -F\| '{
if ($1 in a) {
print "DEBUG: In If clause"
print "duplicate found:" $2 " and " a[$1]
} else {
print "DEBUG: In else clause"
a[$1] = $2
print "DEBUG: a[" $1 "] = " a[$1]
}
print "DEBUG: $1 = " $1
print "DEBUG: $2 = " $2 "\n"
}' test.txt
И это мой вывод
DEBUG: In else clause
DEBUG: a[This is a] = test
DEBUG: $1 = This is a
DEBUG: $2 = test
DEBUG: In else clause
DEBUG: a[That is a] = line
DEBUG: $1 = That is a
DEBUG: $2 = line
DEBUG: In else clause
DEBUG: a[who moans for] = anchovies
DEBUG: $1 = who moans for
DEBUG: $2 = anchovies
DEBUG: In else clause
DEBUG: a[whom moans for] = anchovies
DEBUG: $1 = whom moans for
DEBUG: $2 = anchovies
DEBUG: In If clause
duplicate found: test again and test
DEBUG: $1 =This is a
DEBUG: $2 = test again
Удаление строк отладки:
awk -F\| '{
if ($1 in a) {
print "duplicate found:" $2 " and " a[$1]
} else {
a[$1] = $2
}
}' test.txt
duplicate found: test again and test
Как говорится:
ЭТО РАБОТАЕТ НА МОЙ КОМПЬЮТЕР
(rimshot)
Серьезно, какова ваша программа?делать, и что ты видишь, что делать?Есть ли ошибки?Ваша программа работает как рекламируется.