bash:grep只有符合某些条件的行

时间:2012-02-22 14:52:59

标签: bash awk grep

我试图在第三个字段符合特定条件的文件中插入行。 我尝试使用grep但没有运气过滤掉文件中的字段。 我有一个充满这样的记录的文件:

12794357382;0;219;215
12795287063;0;220;215
12795432063;0;215;220

我只需要grep第三个字段等于215的行(在这种情况下,只有第三行)

非常感谢您的帮助!

7 个答案:

答案 0 :(得分:5)

放下锤子。

$ awk -F ";" '$3 == 215 { print $0 }' <<< $'12794357382;0;219;215\n12795287063;0;220;215\n12795432063;0;215;220'
12795432063;0;215;220

答案 1 :(得分:2)

的grep:

grep -E "[^;]*;[^;]*;215;.*" yourFile

在这种情况下,awk会更容易:

awk -F';' '$3==215' yourFile

答案 2 :(得分:2)

用于预处理的纯bash解决方案,仍然需要grep

while read line; do
  OLF_IFS=$IFS; IFS=";"
  line_array=( $line )
  IFS=$OLD_IFS
  test "${line_array[2]}" = 215 && echo "$line"
done < file | grep _your_pattern_

答案 3 :(得分:1)

简单的egrep(= grep -E

egrep ';215;[0-d][0-d][0-d]$' /path/to/file

egrep ';215;[[:digit:]]{3}$' /path/to/file

答案 4 :(得分:1)

这样的事情怎么样:

cat your_file | while read line; do
    if [ `echo "$line" | cut -d ";" -f 3` == "215" ]; then
        # This is the line you want
    fi
done

答案 5 :(得分:1)

这是第3个字段为215的行的grep的sed版本:

sed -n '/^[^;]*;[^;]*;215;/p' file.txt

答案 6 :(得分:1)

通过将第3个字段放在行的开头来简化您的问题:

cut -d ";" -f 3 file | paste -d ";" - file

然后grep获取与第3个字段匹配的行,并删除开头的第3个字段:

grep "^215;" | cut -d ";" -f 2-

然后你可以grep得到你想要的任何东西。所以完整的解决方案是:

cut -d ";" -f 3 file | paste -d ";" - file | grep "^215;" | cut -d ";" -f 2- | grep _your_pattern_

优势:易于理解; 缺点:很多流程。

相关问题