繁体   English   中英

简单的Linux脚本帮助

[英]Simple linux script help

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

text1;text2;text3;text4
...

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

因此,脚本应仅输出与在x(arg1)列中找到的content(arg2)匹配的WHOLE LINES! )。

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

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

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

解释上述内容后, -v选项设置了awk变量,而不必担心在awk脚本主体中引用问题。 预POSIX版本的awk不会明白的-v选项,但会认识到没有它的变量赋值。 -F选项设置字段分隔符。 在主体中,我们使用具有默认操作的模式(即print ); 模式使用我们用-v为列设置的变量( $awk的“字段索引”运算符,而不是shell变量)和模式( pat确实可以容纳awk风格的正则表达式)。

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

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

蟒蛇

 #!/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
grep -B1 -i "string from previous line" |grep -iv 'check string from previous line' |awk -F" " '{print $1}'

这将打印您的行。

egrep也有一个解决方案。 它不是一个非常漂亮的,但是它可以工作:

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

甚至更短:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM