简单的linux脚本帮助

时间:2011-04-14 19:50:16

标签: linux shell

我有一个文本文件,结构如下:

text1;text2;text3;text4
...

我需要编写一个获得2个参数的脚本:我们要搜索的列和我们想要查找的内容。

因此,脚本应仅输出与列x(arg1)中找到的内容(arg2)匹配的整个行!)。

我尝试过egrep和sed,但我没有足够的经验来完成它。我很感激一些指导...

5 个答案:

答案 0 :(得分:4)

鉴于您需要输出整行的附加信息,awk最简单:

awk -F';' -v col=$col -v pat="$val" '$col ~ pat' $input

解释上述内容,-v选项设置awk变量,而无需担心引用awk脚本正文中的问题。 awk的前POSIX版本不会理解-v选项,但会在没有它的情况下识别变量赋值。 -F选项设置字段分隔符。在正文中,我们使用的是带有默认操作的模式(print);该模式使用我们为-v设置的变量用于列($awk的“字段索引”运算符,而不是shell变量)和模式(和{{ 1}}确实可以拥有pat式样的正则表达式。

答案 1 :(得分:1)

cat text_file.txt| cut -d';' column_num | grep pattern

它仅打印匹配的列而不是整行。让我想想是否有一个简单的解决方案。

答案 2 :(得分:1)

的Python

 #!/usr/bin/env python
 import sys
 column = 1 # the column to search
 value = "the data you're looking for"
 with open("your file","r") as source:
    for line in source:
        fields = line.strip().split(';')
        if fields[column] == value:
             print line

答案 3 :(得分:0)

还有egrep的解决方案。它不是一个非常漂亮但它有效:

egrep "^([^;]+;){`expr $col - 1`}$value;([^;]+;){`expr 3 - $col`}([^;]+){`expr 4 - $col`}$" filename

甚至更短:

egrep "^([^;]+;){`expr $col - 1`}$value(;|$)" filename

答案 4 :(得分:0)

grep -B1 -i "string from previous line" |grep -iv 'check string from previous line' |awk -F" " '{print $1}'

这将打印您的行。