对文本文件中制表符分隔列中的文本进行分类
Posted
技术标签:
【中文标题】对文本文件中制表符分隔列中的文本进行分类【英文标题】:Classify text from tab separated columns in text file 【发布时间】:2017-08-04 19:03:26 【问题描述】:我有一个像this这样的文本文件:
Education June 2007 Bachelors of Science in
Business Administration ORGANIZATION ,
University of Phoenix ORGANIZATION .
June 2005 Associate of Arts in
Liberal Arts ORGANIZATION ,
Victor Valley Junior College ORGANIZATION ,
Victorville LOCATION ,
CA LOCATION .
我想检索分隔前两列的制表符,所以我使用了这个:
cut -f 1-2 input.txt > output.txt
效果很棒!
现在,我想要在第二列中包含 ORGANIZATION 并在第一列中包含特定单词的行,即对于每一行,如果第二列显示 ORGANIZATION,请检查第一列是否包含单词“University”, School","College"等,如果是,写在输出文件中。
有没有什么办法可以通过修改下面的代码或者用python写一个新的来实现?:
cut -f 2-3 input.txt > output.txt
输出应如下所示:
University of Phoenix ORGANIZATION
Victor Valley Junior College ORGANIZATION
【问题讨论】:
预期输出是什么?试试这个可能有帮助awk '$2 ~ /ORGANIZATION/ && $1 ~ /University|School/' inputfile
为什么这个标签是python?
@PS。 - 不工作。
@ChristianW。 - 如果它不能通过修改它,我想要一个 python 解决方案。
您需要将示例输出添加到问题中,以确保在这里回答的人不会浪费您和他们的时间。
【参考方案1】:
你可以使用sed
:
cut -f 1-2 file.txt | sed -n '/(Business|University).*ORGANIZATION/p' > output.txt
这应该匹配所有包含 Business 或 University 和 ORGANIZATION 的行,并打印它们 (p
)。
【讨论】:
【参考方案2】: awk -F"/t" '$1 ~ /University|Business/ && $(NF-1) ~ /ORGANIZATION/' as
Business Administration ORGANIZATION ,
University of Phoenix ORGANIZATION .
如果第一列包含 University OR Business AND 最后一列包含 ORGANIZATION,则打印该行。这里它说的最后一列,但它的倒数第二列,实际的最后一列是命令/句号。
*在这里您可以更改列号以获得所需的结果。 这只是awk
的方式或写法。
【讨论】:
因为那一栏应该有“college”。举一个例子,其中第一列包含“college”,最后一列包含“ORGANIZATION”,并且无法打印该行。 不适用于此:维克多谷初级学院组织。整个维克多谷初级学院是第一列,组织由制表符分隔。 因为这里的第一列是“维克多”而不是大学。大学是第 4 列。 我的评论对你有意义吗,我不想浪费你的时间? 确实如此,我认为您的输入未正确使用制表符分隔。我可能错了。尝试awk -F $'\t' 'print $1'
或awk -v FS=$'\t' 'print $1'
会打印错误的数据。以上是关于对文本文件中制表符分隔列中的文本进行分类的主要内容,如果未能解决你的问题,请参考以下文章