我有一个引用csv文件,它有Column1,Column2。我需要目录中的文件名列表,其中 column1和column2中的值在同一记录(行)中。递归检查csv文件中的所有参考数据,输出应该是......" column1,column2,filename" ...
这些文件也可以是.dat文件和.gz压缩文件。请帮我一个unix脚本。版本Red Hat 6.9。
**Csv Reference File:**
Column1,Column2
Record1Col1,Record1Col2
Record2Col1,Record2Col2
Record3Col1,Record3Col2
Record4Col1,Record4Col2
Record5Col1,Record5Col2
**Output:**
Record1Col1,Record1Col2,txt1.dat
Record1Col1,Record1Col2,txt2.dat
Record1Col1,Record1Col2,txtzip1.gz
Record2Col1,Record2Col2,txt2.dat
Record2Col1,Record2Col2,txtzip5.gz
Record4Col1,Record4Col2,txtzip7.gz
sample data file...
**txt1.dat:**
Xyz|somevalue|Record1Col1|somevalue|somevalue|123|Record1Col2|xyz|
Abc|somevalue|somevalue|somevalue|xyz|
Record2Col1|somevalue|Somevalue|123|somevalue|
答案 0 :(得分:0)
您可以使用awk
执行此操作,
$ cat awk-script
NR==FNR{ # in reference.csv
a[FNR]=$1;b[FNR]=$2; # record the first field into a[FNR], and second into b[FNR]
next
}
{
for(i=1;i<=length(a);i++){ # for other files,
if(($0 ~ a[i]) && ($0 ~ b[i])) # search if each line contained a[i] && b[i]
print a[i],b[i],FILENAME # print it if yes
}
}
$ awk -F'[, ]' -v OFS="," -f awk-script reference.csv *[^csv]
Record1Col1,Record1Col2,txt1.dat
Record1Col1,Record1Col2,txt2.dat
解释
[, ]
,因为有些记录会在帖子中附加空格。并为请求输出设置输出分隔符OFS=","
。awk
的已处理文件顺序为reference.csv *[^csv]
。所以awk
首先解析reference.csv然后解析其他非csv文件。订单无法更改,因为我们需要先在reference.csv中记录该值,然后我们可以将它们查看到其他文件中。awk-script
,您可能会看到附加的评论以获取更详细的信息。如果这有助于您,请告诉我。