这个脚本:
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'时,没有重定向的输出文件,输出转到stdout,这是预期的。我不明白为什么,在这个例子中,我没有得到重定向输出。我也试过,而不是zgrep.
zcat datafile.0[2-3]2015.gz|grep ^$ACCT>>/tmp/$ACCT.txt... 但这不会产生任何产出。
发布于 2018-05-25 20:33:25
调试一段代码是很困难的,因为它不知道其中包含了哪些数据。因此,我将不去猜测您的代码可能会出现什么问题,只会说^$ACCT可能会被双引用,其他所有的$ACCT事件也是如此。
与其对account_list.txt中的每一行调用一次D3(将这些数据文件解压缩的次数与该文件中的行相同),不如将帐户读入awk中的一个数组中,并在一次传递中完成处理:
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中的一个键,则该行将打印到一个适当命名的文件中。
https://unix.stackexchange.com/questions/446072
复制相似问题