简单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实现中更具通用性。