【发布时间】:2017-07-17 22:31:11
【问题描述】:
我的问题涉及以下方面: 我有文件:
FileA:
Peter Programmer
Frank Chemist
Charles Physicist
John Programmer
Alex Programmer
Harold Chemist
George Chemist
我现在从 FileA 中获取所有作业信息并将其保存到唯一列表 (FileB)。
FileB:
Programmer
Chemist
Physcist
(假设 FileA 继续存在更多人员和冗余信息)
我现在要做的是从 FileA 中获取所有作业类,并为每个作业类创建一个新文件,这样最后我就有了:
FileProgrammer
Peter Programmer
John Programmer
Alex Programmer
FileChemist
Frank Chemist
Harold Chemist
George Chemist
FilePhysicist
Charles Physicist
我想grep Jobs File 列表中的作业名称模式,并为其他原始文件中存在的每个作业名称创建一个新文件。
所以实际上,我的列表中有 56 个唯一元素,而原始文件有几列(制表符分隔)。
到目前为止,我所做的是:
cut -f2 | sort | uniq > Jobs
grep -f(tr '\t' '\n' < "${Jobs}") "${FileA}" > FileA+"${Jobs}"
我假设在每个新模式匹配上都会创建一个新文件,但我意识到它只会复制文件,因为没有增量或迭代文件创建。
由于我在 bash 方面的经验还有待深入开发,希望大家能帮助我。提前致谢。
@更新: 输入文件如下所示:
4 23454 22110 Direct + 3245 Corrected
3 21254 12110 Indirect + 2319 Paused-@2
11 45233 54103 Direct - 1134 Not-Corrected
基本上,我希望所有在“已更正”的第 7 列中具有状态的所有内容都位于名为“已更正”的文件中,因此对于第 7 列的每个唯一值。
【问题讨论】:
-
你为什么要用
grep做这个?可以用awk吗? -
当然,我可以使用 awk - 我只是不太熟悉 awk 在循环上下文中的功能。我尝试了一些 awk 循环,但有些失败。
-
用
Awk试试我的回答