[英]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.