簡體   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