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