我正在运行以下命令,只要它们在第一个文件中有内容就可以运行:
awk -F, 'FNR==NR {a[tolower($1)]++; next} !a[tolower($1)]' OutSideSyncUsers.csv NewUsers.csv
如果第一个文件为空,则该命令不起作用。我在网上找到了这个参考文献:
使用双文件成语的所有程序都无法正常工作 如果第一个文件为空(在这种情况下,awk将执行操作 在读取第二个文件时与NR == FNR相关联)。要纠正这个, 您可以通过添加检查测试来强化NR == FNR条件 FILENAME也等于ARGV [1]。
我不确定我理解查询中添加测试检查的方式(或在哪里)等于ARGV [1]
任何帮助都会得到解决
答案 0 :(得分:5)
您可以使用以下附加条件:
awk -F, 'ARGV[1] == FILENAME{a[tolower($1)]++; next} !a[tolower($1)]' OutSideSyncUsers.csv NewUsers.csv
附加条件ARGV[1]==FILENAME
确保第一个块仅对参数列表中的第一个文件执行。当第一个文件为空时,它将跳过第一个块。这样,您可以确保第二个块!a[tolower($1)]
始终在参数列表中的第二个文件上执行。
答案 1 :(得分:4)
使用GNU awk使用ARGIND:
awk -F, '{k=tolower($1)} ARGIND==1{a[k]; next} !(k in a)' OutSideSyncUsers.csv NewUsers.csv
与其他awks的近似值是:
awk -F, '{k=tolower($1)} FILENAME==ARGV[1]{a[k]; next} !(k in a)' OutSideSyncUsers.csv NewUsers.csv
但是如果/当您解析同一个文件两次时,它会失败。