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

2024-06-28 19:08:27 发布

您现在位置:Python中文网/ 问答频道 /正文

在其他操作之后,我实际上是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以便

^{pr2}$

在本例中,由于我将在cat file.txt的管道输出的第一列的每一行上grep,文件{}应该与{}相同。在

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

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

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

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

在本例中,new_out.txt将只包含第一行和第三行。在


Tags: 文件txtnewhere格式withoutgrep
3条回答

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,则打印整行。)

第(2)种情况下,根据第一列中的值进行筛选,但仅当第三列至少包含一个非零元素时:

^{pr2}$

(除了上一个例子中的条件外,我们还确保第三列$3包含模式:<one_or_more_digits_except_zero>:,在值的开始和结尾省略了起始冒号{}。)

to grep the first column row only if the third column contains non-zero elements

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

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

^{pr2}$

相关问题 更多 >