Arrays bash:awk目录下可能有空格的所有文件,将它们视为同一个文件

Arrays bash:awk目录下可能有空格的所有文件,将它们视为同一个文件,arrays,bash,awk,find,Arrays,Bash,Awk,Find,试图在一个目录和所有子目录下找到所有具有特定命名结构的文件,并使用awk解析出我想要的数据。只要文件夹或文件名中没有空格,我就可以得到它 我首先使用find查找文件并将它们放入数组中。然后我使用数组作为awk的文件名。但是数组将任何空格视为不同的元素,因此它将/Documents/Untitled Folder/file.txt拆分为/Documents/Untitled和Folder/file.txt 有没有办法推送可能也包含空格的文件?到目前为止,如果没有没有没有空格的文件/目录/子目录,这

试图在一个目录和所有子目录下找到所有具有特定命名结构的文件,并使用awk解析出我想要的数据。只要文件夹或文件名中没有空格,我就可以得到它

我首先使用find查找文件并将它们放入数组中。然后我使用数组作为awk的文件名。但是数组将任何空格视为不同的元素,因此它将
/Documents/Untitled Folder/file.txt
拆分为
/Documents/Untitled
Folder/file.txt

有没有办法推送可能也包含空格的文件?到目前为止,如果没有没有没有空格的文件/目录/子目录,这就是我所拥有的

arrFindFiles=($(find . -name "f*.txt" | sed 's/\ /\\\ /g'))    
arrData+=("$(awk -F , '{if($9$10!=NULL) a[$9$10$13]++ } END { for (b in a) { print b } }' ${arrFindFiles[@]})")    
任何帮助都将不胜感激

让我猜猜看

生成一个临时文件,列出当前文件夹中的所有txt文件

$ find . -type f -name "f*.txt" > temp.txt

$ cat temp.txt
./b/f ab.txt
./b/fa.txt
./f a b.txt
./fab.txt
然后运行awk命令找出重复的名称

awk -F \/ '{a=$0;b=$NF;gsub(/ /,"",$NF);c[$NF]=c[$NF]==""?a:c[$NF] OFS a;d[$NF]++}
    END{for (i in d) if (d[i]>1) print "found duplicate name: \n" c[i]}' OFS=" | " temp.txt

found duplicate name:
./b/f ab.txt | ./f a b.txt | ./fab.txt

对于第一行处理带有空格的文件,只需在前面放置一个eval:

eval arrFindFiles=($(find . -name "f*.txt" | sed 's/\ /\\\ /g'))
要使第二行正常工作,请仅在
${arrFindFiles[@]}
周围加上双引号:

arrData+=($(awk -F, '{ if ($9$10!=NULL) a[$9$10$13]++ } END { for (b in a) { print b } }' "${arrFindFiles[@]}"))

为什么要构建一个数组,而不是简单地将
find
的输出管道化到
awk
?或
sed
命令的输出,如果确实需要的话。。。如果您想在shell cmd行中实现任何类型的模块化,我建议您使用文件,除非您的数据格式严格正确。类似于
find-name“f*.txt”-print0 | xargs-0 awk'.'
的方法可能是更好的方案。。。