3 つのファイルがあり、awk を使用して最初の 2 つを比較し、最後のファイルを frist ファイルと一致しない名前で更新したいと考えています。
ファイル 1: ignore.txt
bob
diana
ファイル 2: list.txt
alice
bob
chris
diana
elvis
ファイル 3: names.txt
alice
chris
elvis
ファイル 2 には新しい名前が少しずつ追加されるので、それを他の両方のファイルと比較し、そのリストにある新しい名前を names.txt に追加できる必要があります。
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)
}
どうすればそれを機能させることができますか?混乱を招くので、コードはあまり良くありません。ごめん。