2017-05-01 87 views
0

我有兩個文件,一個是var.txt和另一res.dat文件如何比較兩個文件,並提取信息

var.txt包含,情報像下面

date,request,sales,item 
20171015,1,123456,216  
20171015,1,123456,217 
20171015,2,345678,214  
20171015,3,456789,218 

和res.dat包含是一個巨大的文件包含像下面

RTCCVB01 213456 123456 216 
. 
. 
. 
VBPCVB01 

RTCCVB01 213456 345678 214 
. 
. 
. 
VBPCVB01 

RTCCVB01 213456 123456 217 
. 
. 
. 
VBPCVB01 

RTCCVB01 213456 456789 218 
. 
. 
. 
VBPCVB01 

信息對於一個唯一的請求我在var.txt創建一個單獨的dat文件, 例如用於第二列請求 對於請求1有銷售123456,其具有2項216和217這樣的dat文件將被像下面

對於請求1創建 - 123456.dat

RTCCVB01 213456 123456 216 
. 
. 
VBPCVB01 

RTCCVB01 213456 123456 217 
. 
. 
. 
VBPCVB01 

用於請求2 345678.dat

RTCCVB01 213456 345678 214 
. 
. 
. 
VBPCVB01 

用於請求3 456789.dat

RTCCVB01 213456 456789 218 
. 
. 
. 
VBPCVB01 

銷售發生在50-56位置res.dat文件中res.dat文件
項目出現在72-79位置

我必須寫一個shell腳本,將來自VAR每一個獨特的要求之下做。 txt它將採取銷售和項目,並從res.dat中提取信息,並將創建單獨的dat文件,直到完成所有請求編號。

如果我切-d,-f3,4 var.txt
輸出將是123456 216

我必須使用上面的輸出和遞歸搜索res.dat文件,並據此根據請求將創建dat文件

+0

好基督的人。將您的示例排序。 – Henry

+0

非常簡單。我會在我完成我的茶杯茶後提供答案 – Rico

+0

等待等待,在Linux上? – Rico

回答

1

是這樣的?基於預期產出,var.dat似乎徒勞無功。

$ awk 'BEGIN{RS=ORS="VBPCVB01\n"}{f=$3 ".dat"; print >> f; close(f)}' res.dat 
$ cat 123456.dat 
RTCCVB01 213456 123456 216 
. 
. 
. 
VBPCVB01 

RTCCVB01 213456 123456 217 
. 
. 
. 
VBPCVB01 

解釋:

awk ' 
BEGIN { RS=ORS="VBPCVB01\n" } # set the delimiters appropriately 
{ 
    f=$3 ".dat"    # set $3 as the filename 
    print >> f     # append records to the file 
    close(f)     # close the file (due to "huge file") 
}        # to avoid running out of fds (unknown unix) 
' res.dat      # this file only 
+0

如果你看到var.txt第二列包含請求,第三列包含銷售,第四列是項目,我必須從var.txt獲取輸入,這將是唯一的銷售及其相應的項目,例如請求1,有一個獨特的銷售-123456,它有2個項目216和217,所以它將創建一個單一的數據文件等,每個請求將創建一個單一的數據文件 – user229374

1

AWK方法:

awk '/RTCCVB01/{fn=$3}{print > fn".dat"}' res.dat 

此命令包含2套花括號:控制進入所述第一組大括號只在遇到一條線c保留模式RTCCVB01。由於沒有條件,因此每條線都會遇到第二組,因此總是如此。

在遇到模式RTCCVB01時,會創建並存儲新的文件名。當第一個RTCCVB01到來時,fn將包含123456並且控件進入下一組大括號並且記錄被寫入123456.dat,並且隨後的記錄進入文件123456.dat直到下一個RTCCVB01到達。


cat 123456.dat 
RTCCVB01 213456 123456 216 
. 
. 
. 
VBPCVB01 

RTCCVB01 213456 123456 217 
. 
. 
. 
VBPCVB01 

cat 345678.dat 
RTCCVB01 213456 345678 214 
. 
. 
. 
VBPCVB01 

cat 456789.dat 
RTCCVB01 213456 456789 218 
. 
. 
. 
VBPCVB01 
+0

不錯的緊湊解決方案。生成的文件(除了最後一個)有一個尾隨的空行。基於原始問題的粗心格式,應該沒問題。 – ULick

+0

@ULick,是的,如果進一步追加'>>'新記錄到文件 – RomanPerekhrest

+0

@RomanPerekhrest,如果您看到var.txt第二列包含請求,第三列包含銷售和第四列列是項目,我必須從var.txt獲取輸入,這將是唯一的銷售和相應的項目,例如對於請求1,有獨特的銷售-123456,並且它有2個項目沒有216和217,所以它將創建一個單一的dat文件 – user229374