[英]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.