在Linux:運行在Linux上查詢選擇CSV'S
有很多.csvs'的文件夾中,我要選擇那些CSV的有文件列名{‘PREDICT’= 646}。
檢查此鏈接: https://prnt.sc/gone85
什麼樣的查詢工作?
在Linux:運行在Linux上查詢選擇CSV'S
有很多.csvs'的文件夾中,我要選擇那些CSV的有文件列名{‘PREDICT’= 646}。
檢查此鏈接: https://prnt.sc/gone85
什麼樣的查詢工作?
請問您是否可以試試以下內容,並告訴我這是否對您有所幫助。
解決方案第一:爲了簡單地讀取文件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","
上相同。
提供這是未撥備測試數據):
$ 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
個
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
請看:https://stackoverflow.com/questions/2373885/searching-a-csv-file-using-grep –
您想運行的代碼在多個文件中找到?我想要求你在你的文章中提到更清楚的細節,請幫助我們幫助你,享受學習! – RavinderSingh13
你是什麼意思與*選擇** **那些CSV的*? – RomanPerekhrest