简单linux脚本帮助

简单linux脚本帮助,linux,shell,Linux,Shell,我有一个具有以下结构的文本文件: text1;text2;text3;text4 ... 我需要编写一个脚本来获取两个参数:我们要搜索的列和我们要查找的内容 因此,脚本应该只输出与列x(arg1)中的内容(arg2)匹配的行(整行!) 我试过使用egrep和sed,但我没有足够的经验来完成它。我希望得到一些指导 cat text_file.txt| cut -d';' column_num | grep pattern 它只打印匹配的列,而不打印整行。让我想想是否有一个简单的解决办法 它只打

我有一个具有以下结构的文本文件:

text1;text2;text3;text4
...
我需要编写一个脚本来获取两个参数:我们要搜索的列和我们要查找的内容

因此,脚本应该只输出与列x(arg1)中的内容(arg2)匹配的行(整行!

我试过使用egrep和sed,但我没有足够的经验来完成它。我希望得到一些指导

cat text_file.txt| cut -d';' column_num | grep pattern
它只打印匹配的列,而不打印整行。让我想想是否有一个简单的解决办法

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

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
蟒蛇


如果您添加了需要输出整行的信息,
awk
最简单:

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

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

如果您添加了需要输出整行的信息,
awk
最简单:

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

在解释上述内容时,
-v
选项设置了
awk
变量,而无需担心在
awk
脚本主体中引用问题。
awk
的POSIX之前版本不理解
-v
选项,但在没有它的情况下会识别变量赋值。
-F
选项设置字段分隔符。在body中,我们使用了一个带有默认操作(即
print
)的模式;模式使用我们用
-v
为列设置的变量(
$
awk
的“字段索引”操作符,而不是shell变量)和模式(以及
pat
确实可以保存
awk
-风格的正则表达式)。

还有一个使用
egrp
的解决方案。这不是一个很漂亮的,但它很有效:

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

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

还有一个带有
egrep
的解决方案。这不是一个很漂亮的,但它很有效:

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

egrep "^([^;]+;){`expr $col - 1`}$value(;|$)" filename
这将打印您的行


这将打印您的行。

但我需要输出整行,而不仅仅是找到的列。但我需要输出整行,而不仅仅是找到的列。
mawk
awk
的一个变体,是的。它应该与我写的内容兼容;一些
awk
s无法理解
-v
,但在这种情况下,您可以只列出变量设置,而不使用
-v
前缀(命令行变量设置的POSIX前语法)。要在awk中使用shell变量(按值),我通常会这样做:awk-F';''$'$列“~”$PAT“$输出。注意,$COL是一个shell变量,awk将其视为(该变量的)值。此方法可读性较差,但在许多awk实现中更具通用性。
mawk
awk
的一个变体,是的。它应该与我写的内容兼容;一些
awk
s无法理解
-v
,但在这种情况下,您可以只列出变量设置,而不使用
-v
前缀(命令行变量设置的POSIX前语法)。要在awk中使用shell变量(按值),我通常会这样做:awk-F';''$'$列“~”$PAT“$输出。注意,$COL是一个shell变量,awk将其视为(该变量的)值。这种方法可读性较差,但在许多awk实现中更具通用性。