2017-09-23 85 views
0

在Linux:運行在Linux上查詢選擇CSV'S

有很多.csvs'的文件夾中,我要選擇那些CSV的有文件列名{‘PREDICT’= 646}。

檢查此鏈接: https://prnt.sc/gone85

什麼樣的查詢工作?

+2

請看:https://stackoverflow.com/questions/2373885/searching-a-csv-file-using-grep –

+0

您想運行的代碼在多個文件中找到?我想要求你在你的文章中提到更清楚的細節,請幫助我們幫助你,享受學習! – RavinderSingh13

+0

你是什麼意思與*選擇** **那些CSV的*? – RomanPerekhrest

回答

0

請問您是否可以試試以下內容,並告訴我這是否對您有所幫助。

解決方案第一:爲了簡單地讀取文件1和打印其具有在相同的字段/地方字符串「預測」的任何線646值存在於報頭中的整行。

awk 'NR==1{for(i=1;i<=NF;i++){if($i == "PREDICT"){val=i}};next} $val==646' Input_file 

解決第二:如果你必須檢查串的場數「預測」的每個文件,然後以下可能會幫助你。

awk 'FNR==1{if(FILE){close(FILE)};for(i=1;i<=NF;i++){if($i == "PREDICT"){val=i}};FILE=FILENAME;next} $val==646{print;nextfile}' *.csv 

解決方案3:如果你所有的.csv文件對字符串相同的位置「預測」,那麼下面可以幫助你。

awk 'NR==1{for(i=1;i<=NF;i++){if($i == "PREDICT"){val=i}};if(FILE){close(FILE)};next} FNR==1{if(FILE){close(FILE)};FILE=FILENAME} $val==646{print;nextfile}' *.csv 

如果您的.csv INPUT_FILE是有任何字段分隔符,那麼你可以設置-F如 - >awk -F","上相同。

1

提供這是未撥備測試數據):

$ cat > file1 
ACTUAL PREDICT 
1 2 
3 646 

$ cat > file2 
ACTUAL PREDICT 
1 2 
3 666 

然後一些GNU AWK(nextfile選擇那些CSV的具有文件列名稱{ 'PREDICT'= 646}或其中存在PREDICT柱,用值646

$ awk 'FNR==1{for(i=1;i<=NF;i++)if($i=="PREDICT")p=i}$p==646{print FILENAME;nextfile}' file1 file2 
file1 

解釋:

awk ' 
FNR==1 {     # get the column number of PREDICT column for each file 
    for(i=1;i<=NF;i++) 
     if($i=="PREDICT") 
      p=i   # set it to p 
} 
$p==646 {     # if p==646, we have a match 
    print FILENAME   # print the filename 
    nextfile    # and move on to the next file 
}' file1 file2    # all the candicate files 
0

GNU AWK溶液不循環:

$ cat tst.awk 
BEGIN{FS=","} 
FNR==1 && s=substr($0,1,index($0,"PREDICT")) { # look for index of PREDICT 
    i=sub(/,/, "", s) + 1      # and count nr of times you 
               # can replace "," in preceding 
               # substring 
} 
s && $i==646 { print FILENAME; nextfile } 

一些輸入:

$ cat file1.csv 
ACTUAL,PREDICT,COUNTRY,REGION,DIVISION,PRODUCTTYPE,PRODUCT,QUARTER,YEAR,MONTH 
925,850,CANADA,EAST,EDUCATION,FURNITURE,SOFA,1,1993,12054 
925,533,CANADA,EAST,EDUCATION,FURNITURE,SOFA,1,1993,12054 
925,646,CANADA,EAST,EDUCATION,FURNITURE,SOFA,1,1993,12054 

$ cat file2.csv 
ACTUAL,PREDICT,COUNTRY,REGION,DIVISION,PRODUCTTYPE,PRODUCT,QUARTER,YEAR,MONTH 
925,850,CANADA,EAST,EDUCATION,FURNITURE,SOFA,1,1993,12054 
925,533,CANADA,EAST,EDUCATION,FURNITURE,SOFA,1,1993,12054 
925,111,CANADA,EAST,EDUCATION,FURNITURE,SOFA,1,1993,12054 

和:

$ cp file1.csv file3.csv 

給出:

$ awk -f tst.awk *.csv 
file1.csv 
file3.csv 

或者使用一個班輪:

$ awk -F, 'FNR==1 && s=substr($0,1,index($0,"PREDICT")) {i=sub(/,/, "", s) + 1}s && $i==646 { print FILENAME; nextfile }' *.csv 
file1.csv 
file3.csv