У меня есть три файла, и я бы хотел использовать awk для сравнения первых двух, а затем обновить последний с именами, которые не совпадают с файлом frist.Сравнение трех файлов в Awk
Файл 1: ignore.txt
bob
diana
Файл 2: list.txt
alice
bob
chris
diana
elvis
Файл 3: names.txt
alice
chris
elvis
Файл 2 будет иметь новые имена добавлены каждый раз, так что я должен быть в состоянии сравнить его с обоими другими файлами и добавить любые новые имена в этот список в names.txt.
Это мой сценарий до сих пор, сравнение List и ignore работает, но оно не делает обновление, потому что я до сих пор не понимаю, как использовать getline
и сравнить новый массив с файлами в памяти.
Я вызываю скрипт как: awk -f compare ignore.txt list.txt
, и он работает. Если я вызываю его с дополнительной переменной, он не делает этого: awk -f compare -v newnames=1 ignore.txt list.txt
.
BEGIN {
file="list.txt"
tmpfile="new_list.txt"
}
# working
FNR == NR { names[$0]++; next }
!names[$0] {
print > names.txt
}
{ #not working
if (newnames == 1) {
mvcmd="mv " tmpfile file;
while ((getline newnames < file) > 0)
newnames[$0]++; next
!newnames[$0];
print > tmpfile
system(mvcmd)
close(dbfile)
}
Как я могу заставить его работать? Код не очень хорош, потому что я нахожу его запутанным. Сожалею.
Если заказ не важен, вы можете полностью игнорировать содержимое 'file3'. –
Существует очень мало оснований для использования getline. Убедитесь, что вы прочитали и ПОЛНОСТЬЮ понимаете все подводные камни, описанные в http://awk.info/?tip/getline, если вы планируете использовать его. –