从一组压缩文件中查找帐户名称(从文件中读取)

从一组压缩文件中查找帐户名称(从文件中读取)

这个脚本:

while read ACCT ; do
echo $ACCT
zgrep -h ^$ACCT datafile.0[2-3]2015.gz >>/tmp/$ACCT.txt
done < /account_list.txt

我没有得到重定向的输出文件当我删除时'>>/tmp/$ACCT.txt',输出将转到标准输出,这是预期的。我不明白为什么在这个例子中我没有得到重定向的输出。我也尝试过,而不是 zgrep...

zcat datafile.0[2-3]2015.gz|grep ^$ACCT>>/tmp/$ACCT.txt... 

但这不会产生任何输出。

答案1

如果不知道一段代码中包含哪些数据,就很难调试它。因此,除了说可能应该用双引号引起来之外,我不会猜测您的代码可能有什么问题^$ACCT,就像所有其他出现的$ACCT.


不要zgrep为 in 的每一行调用一次account_list.txt(解压缩这些数据文件的次数与该文件中的行数相同),而是将帐户读入数组 inawk并在一次传递中进行处理:

awk 'NR==FNR { acct[$1]; next }
     $1 in acct { file="/tmp/" $1 ".txt"; print >>file; close(file) }' \
    account_list.txt <( zcat datafile.0[2-3]2015.gz )

这假设bash或其他一些理解进程替换的 shell。它还假设帐户列表在第一列中包含帐户名称,并且数据文件也在第一列中包含帐户名称(您实际上没有显示这些文件的样子,所以我不能说是否这是否有效)。

第一个awk块仅针对第一个文件 执行,account_list.txt并将创建一个关联数组 ,acct并将要提取的帐户名称作为键。

第二个块仅在提取的数据文件的行上执行,如果第一个字段对应于 中的键acct,则该行将打印到适当命名的文件中。

相关内容