2014-01-17 143 views
-3

我需要執行以下任務。這些都包含在bash腳本中。bash腳本可以通過多個文件進行交互

1)從一個文件中讀取如下所示的文件,以及所有具有變量的行 var1 =「AB」和var2 =「14003」我需要從列4中獲取子字符串len 8,說在VAR3,(陣列,概率。或在一個循環,然後刪除這些行。

2 *563587992014-01-26  2014-01-26T09:45:53  AB 14003 5   3.60 
2 563589242014-01-26  2014-01-26T10:03:13  AB 14003 6   4.80 
2 563589252014-01-26  2014-01-26T10:03:20  TC 14002 2   5.50 
2 563589272014-01-26  2014-01-26T10:03:34  FF 14002 3   3.30 

匹配字段標有* 2)然後我需要去通所收集的子串,並打開另一個文件,如下所示,並刪除子字符串(4,8)匹配之前收集的var3的所有行

56370388 1 1.000 95   0.80Double Coffe 
    *56358799 1 1.000 94   0.40Milk‚ 
    *56358799 2 1.000 94   0.40Coffe‚ 
    56370388 1 1.000 97   0.40Descafe 

我想也許在嵌套循環中,使用awk和sed。但投入,將不勝感激:)

+1

多在樣本輸出數據似乎並不在您的示例輸入中。關於S.O.的好Q將給出這個樣本輸入1. 2.示例輸出。 3.堆棧溢出不是意味着免費編程的來源,所以你應該在你的問題中包括你當前的代碼,4.你當前的輸出,以及5.你對它爲什麼不工作的想法;-)確定?!? ;-)。也知道你可以使用輸入框顯示代碼格式的左上角的'{}'工具。祝你好運。 – shellter

+0

爲什麼頂級文件第一行只有一顆星?第二排不應該有一顆明星嗎? (第二行似乎也匹配'var1'和'var2' ..) –

回答

1

這裏是一個開始:請嘗試以下bash腳本:

#! /bin/bash 

var1="AB" 
var2="14003" 

awk -vv1="$var1" -vv2="$var2" '  
    NR==FNR { 
     if ($4==v1 && $5==v2) { 
      s=substr($0,4,8) 
      a[s]++ 
     } 
     next 
    } 
    !($1 in a) { 
     print 
    }' file1 file2 

輸出:

56370388 1 1.000 95   0.80Double Coffe 
56370388 1 1.000 97   0.40Descafe 
+0

謝謝哈康Hægland,但它並不在我的系統工作。 如果我理解,腳本比較針對VV1和VV2的file1的每一行的第四位置,並且如果它們匹配,則生成分配給變量s的子字符串。請原諒我的無知,但如果有下一個,不應該也是FOR!? –

+0

@PedroCaldeira你是否收到任何錯誤信息? –

+0

@PedroCaldeira'next'語句與'awk'中的'for'無關。 'next'用於處理下一輸入記錄,跳過所有保留的規則在'awk'程序。請參見:http://www.gnu.org/software/gawk/manual/gawk.html#Next-Statement –

相關問題