Bash:如何从列中具有特定值的文件中选择行

问题描述:

我有一个需要分析的巨大文件。我想要做的是将那些在特定列中具有特定值的行分开。因此,它就像只选择那些属于某个类别的数据。如何用简单的bash commnand或脚本来完成。Bash:如何从列中具有特定值的文件中选择行

例如,我想仅分隔那些在第8列中具有值1,2或3的行。该文件是空格分隔的。

您可以使用AWK为:

awk '$8 == 1 || $8 == 2 || $8 == 3 || $8 == 4' file 
+0

感谢,应该已经学到的awk。似乎很方便:)。 – sfactor 2010-12-13 12:55:06

+0

如果文件是gzipped,我需要gunzip -c文件| ...?我无法在管道中运行awk方法。 – Ash 2016-07-20 06:32:38

+0

如果输入文件是gzip:gunzip -c input.gz | awk'BEGIN {FS =“\ t”} $ 5 ==“en”|| $ 13 ==“en”'| gzip> output.gz – Ash 2016-07-20 23:17:08

用AWK:

awk '$8 >= 1 && $8 <= 4' your_file.txt 

另一个awk的答案。

awk '$8 ~ /[1-4]/' file 

但是,只是一些品种,一个bash答案

while read line ; do 
    fields=($line) 
    [[ ${fields[7]} =~ [1-4] ]] && echo $line 
done < file 

另一个AWK答案:

awk '$8 ~ /1|2|3|4/' inputfile