首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从一组压缩文件中删除帐户名(从文件中读取)

从一组压缩文件中删除帐户名(从文件中读取)
EN

Unix & Linux用户
提问于 2018-05-25 20:21:25
回答 1查看 51关注 0票数 0

这个脚本:

代码语言:javascript
复制
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.

代码语言:javascript
复制
zcat datafile.0[2-3]2015.gz|grep ^$ACCT>>/tmp/$ACCT.txt... 

但这不会产生任何产出。

EN

回答 1

Unix & Linux用户

发布于 2018-05-25 20:33:25

调试一段代码是很困难的,因为它不知道其中包含了哪些数据。因此,我将不去猜测您的代码可能会出现什么问题,只会说^$ACCT可能会被双引用,其他所有的$ACCT事件也是如此。

与其对account_list.txt中的每一行调用一次D3(将这些数据文件解压缩的次数与该文件中的行相同),不如将帐户读入awk中的一个数组中,并在一次传递中完成处理:

代码语言:javascript
复制
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中的一个键,则该行将打印到一个适当命名的文件中。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/446072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档