文件匹配模式递归的唯一 headers 列表
List of unique headers recursively on files matching pattern
我想要一组 csv
文件的唯一 headers,这些文件的名称包含 ABC
或 XYZ
.
在一个目录中,我可以通过以下方式获得我需要的内容:
head -n ` *.csv > first.txt
cat -A first.txt | tr ',' '\n' | sort | uniq
当然,这不是递归的,它包括 所有 csv
个文件,而不仅仅是我想要的文件。
如果我执行以下操作,我得到了递归搜索,但也是一堆垃圾:
find . -type f -name "ABC*.csv" -o -name "XYZ*.csv" | xargs head -n 1 | tr ',' '\n' | sort | uniq
我在 Windows 10 上使用 MinGW64。我想我可以使用 Python,但我感觉离拥有它太近了!
当 head
被赋予多个文件时(xargs
这样做)它也会打印它们的名字。
使用find
的-exec
操作(你应该强制-name 'ABC*.csv' -o -name 'XYZ*.csv
的优先级才能工作)你可以获得想要的结果。 uniq
在这里也不是必需的,排序可以自己完成。作为旁注,您最好将文字字符串括在单引号中。
find . -type f \( -name 'ABC*.csv' -o -name 'XYZ*.csv' \) -exec head -n 1 {} \; | tr ',' '\n' | sort -u
如果你的文件有 DOS 行结尾,上面的命令将不起作用。在这种情况下,您应该使用 tr
或 sed
:
删除回车符 returns
find . -type f \( -name 'ABC*.csv' -o -name 'XYZ*.csv' \) -exec head -n 1 {} \; | tr -d '\r' | tr ',' '\n' | sort -u
# or
find . -type f \( -name 'ABC*.csv' -o -name 'XYZ*.csv' \) -exec head -n 1 {} \; | sed 's/\r//; s/,/\n/g' | sort -u
我想要一组 csv
文件的唯一 headers,这些文件的名称包含 ABC
或 XYZ
.
在一个目录中,我可以通过以下方式获得我需要的内容:
head -n ` *.csv > first.txt
cat -A first.txt | tr ',' '\n' | sort | uniq
当然,这不是递归的,它包括 所有 csv
个文件,而不仅仅是我想要的文件。
如果我执行以下操作,我得到了递归搜索,但也是一堆垃圾:
find . -type f -name "ABC*.csv" -o -name "XYZ*.csv" | xargs head -n 1 | tr ',' '\n' | sort | uniq
我在 Windows 10 上使用 MinGW64。我想我可以使用 Python,但我感觉离拥有它太近了!
当 head
被赋予多个文件时(xargs
这样做)它也会打印它们的名字。
使用find
的-exec
操作(你应该强制-name 'ABC*.csv' -o -name 'XYZ*.csv
的优先级才能工作)你可以获得想要的结果。 uniq
在这里也不是必需的,排序可以自己完成。作为旁注,您最好将文字字符串括在单引号中。
find . -type f \( -name 'ABC*.csv' -o -name 'XYZ*.csv' \) -exec head -n 1 {} \; | tr ',' '\n' | sort -u
如果你的文件有 DOS 行结尾,上面的命令将不起作用。在这种情况下,您应该使用 tr
或 sed
:
find . -type f \( -name 'ABC*.csv' -o -name 'XYZ*.csv' \) -exec head -n 1 {} \; | tr -d '\r' | tr ',' '\n' | sort -u
# or
find . -type f \( -name 'ABC*.csv' -o -name 'XYZ*.csv' \) -exec head -n 1 {} \; | sed 's/\r//; s/,/\n/g' | sort -u