对文本文件中制表符分隔列中的文本进行分类

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' 会打印错误的数据。

以上是关于对文本文件中制表符分隔列中的文本进行分类的主要内容,如果未能解决你的问题,请参考以下文章

从文本文件中删除每个单独列中的重复项

支持向量机 (SVM) 的功能

索引巨大的文本文件

在 vba 中手动创建制表符分隔的文本文件

如何将制表符分隔的文本文件导入 Excel?

使用python将文本文件转换为excel文件(制表符分隔)