运行在Linux上查询选择CSV'S
问题描述:
在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://*.com/questions/2373885/searching-a-csv-file-using-grep –
您想运行的代码在多个文件中找到?我想要求你在你的文章中提到更清楚的细节,请帮助我们帮助你,享受学习! – RavinderSingh13
你是什么意思与*选择** **那些CSV的*? – RomanPerekhrest