繁体   English   中英

如何在制表符分隔的管道输出的第一列上进行grep? 子集?

[英]How to grep on the first column of tab-delimited piped output? Subset?

其他操作后,我本质cat荷兰国际集团一个文件,该文件在输出制表符分隔的格式。

有专栏

$ cat file.txt 
longstring1:with:semicolons    ERFVBNMNBFGHNMKJHNMH    1:2:2:2:2    -
secondline:is:here    VHNBVFTYHNBGHJMKJHJMN    0:0:0:0:0    -
third:canbefound:here    VFTYHBVFGHJNJGVGHJKMNGB    4:1:0:1:0    -

(1)将此输出插入grep ,我如何仅对第一列进行grep以便

$ cat file.txt | grep first_column > new_out.txt

在这种情况下,我会grep荷兰国际集团从的管道输出的第一列各行cat file.txt ,文件new_out.txt应该是一样的file.txt

(2)是否可以使用命令行工具根据某些条件在第一列上执行grep?

我只想在第三列包含非零元素时grep第一列行。 这可能吗,还是应该使用某种脚本语言(例如Python)?

在这种情况下,操作将类似于

$ cat file.txt | grep first_column if some_condition > new_out.txt

在这种情况下, new_out.txt将仅包含第一行和第三行。

awk救援。

情况(1),根据第一列( $1 )中的值进行过滤:

$ awk -F'\t' '$1~"here" {print}' file
secondline:is:here    VHNBVFTYHNBGHJMKJHJMN    0:0:0:0:0    -
third:canbefound:here    VFTYHBVFGHJNJGVGHJKMNGB    4:1:0:1:0    -

(如果第一列$1 here包含模式/字符串,则here打印完整行。)

情况(2),请根据第一列中的值进行过滤,但前提是第三列中至少包含一个非零元素:

$ awk -F'\t' '$3~/(^|:)[1-9]+(:|$)/ && $1~"here" {print}' file
third:canbefound:here    VFTYHBVFGHJNJGVGHJKMNGB    4:1:0:1:0    -

(除了前一种情况的条件外,我们确保第三列$3包含模式:<one_or_more_digits_except_zero>:在值的开头和结尾均省略开头的冒号: 。)

仅在第三列包含非零元素时才对第一列行进行grep

awk '$3~/[1-9]/{ print $1 }' file.txt > new_out.txt

使用awk

$ awk ' $3!~/0:0:0:0:0/{print}' file
longstring1:with:semicolons    ERFVBNMNBFGHNMKJHNMH    1:2:2:2:2    -
third:canbefound:here    VFTYHBVFGHJNJGVGHJKMNGB    4:1:0:1:0

如果要搜索第一列中的任何内容,请使用,然后将其修改为:

$ awk ' $3!~/0:0:0:0:0/ && $1~/with/{print}' file
longstring1:with:semicolons    ERFVBNMNBFGHNMKJHNMH    1:2:2:2:2    -

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM