【发布时间】:2013-01-04 10:26:48
【问题描述】:
我有一组看起来像这样的数据
col1 col2 col3 col4
ABC1 DEF1 GHI1 cond1
ABC2 DEF2 GHI2 cond1-cond2
ABC3 DEF3 GHI3 cond2/cond1
ABC4 DEF4 GHI4 cond2 cond1
ABC5 DEF5 GHI5 cond4/cond1
ABC6 DEF6 GHI6 cond1
ABC7 DEF7 GHI7 mcond1
ABC8 DEF8 GHI8 cond2
ABC9 DEF9 GHI9 cond1 at 50
ABCa DEFa GHIa con cond1
ABCb DEFb GHIb no. cond1
ABCc DEFc GHIc cond1 something
ABCc DEFc GHIc Mcond1
我正在尝试编写几个命令来根据“col4”来分隔数据以获取:
-
一个包含字符串“cond1”的文件,在它之前或之后有任何内容,除了“M”和“m”字母。我目前正在为此使用这个命令(显然不排除 M 和 m):
awk 'BEGIN{IGNORECASE=1} $4 ~ /.cond1/ || $4 ~ /cond1./ ' /filepath.tab请不要在第 4、9 和 11 行数据中包含“cond1”和其他字符串之间的空格,我希望将其包含在文件中。 (命令中的“.”是否包含空格?)
-
我写了一个命令来获取一个仅在“col4”中包含“cond1”的文件
awk 'BEGIN{IGNORECASE=1} $4 ~ /^cond1$/ ' /filepath.tab大多数数据都可以正常工作,尽管我在结果中发现了这 2 个错误:
ABC9 DEF9 GHI9 cond1 at 50 ABCc DEFc GHIc cond1 something
谁能帮我解决这两个命令? 谢谢。
我正在寻找不包含任何重复的 3 个文件的输出,这是一个示例: File1(包含所有与 cond1 的组合):
col1 col2 col3 col4
ABC2 DEF2 GHI2 cond1-cond2
ABC3 DEF3 GHI3 cond2/cond1
ABC4 DEF4 GHI4 cond2 cond1
ABC5 DEF5 GHI5 cond4/cond1
ABC9 DEF9 GHI9 cond1 at 50
ABCa DEFa GHIa con cond1
ABCb DEFb GHIb no. cond1
ABCc DEFc GHIc cond1 something
File2(仅包含 cond1):
col1 col2 col3 col4
ABC1 DEF1 GHI1 cond1
ABC6 DEF6 GHI6 cond1
File3(包含 file1 和 file2 中未包含的任何内容):
col1 col2 col3 col4
ABC7 DEF7 GHI7 mcond1
ABC8 DEF8 GHI8 cond2
ABCc DEFc GHIc Mcond1
注意3个文件的总行数与原文件相同 如果这听起来很复杂,我很抱歉,但我确实有这种情况。
【问题讨论】:
-
你想要的输出是什么!
-
列之间的分隔符是什么?是标签吗?如果其空间第 11 行第 4 列将不包含
cond1。这是第 5 列 -
是的,它是一个制表符分隔的文件,有时单词之间有一个空格。 (我确信这不是不同的列,因为这是一个大文件,我用 cut 只取出这 4 列)
-
看我的回答。它应该可以工作。