1

我想要一堆csv名称包含ABCor的文件的唯一标题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

我在带有 MinGW64 的 Windows 10 上。我想我可以使用 Python,但我感觉离拥有它如此之近!

4

1 回答 1

1

head给定多个文件(xargs这样做)时,它也会打印它们的名称。

使用find'-exec操作(您应该强制其优先-name 'ABC*.csv' -o -name 'XYZ*.csv工作),您可以获得所需的结果。uniq这里也不需要, sort 可以自己做。作为旁注,您最好将文字字符串括在单引号中。

find . -type f \( -name 'ABC*.csv' -o -name 'XYZ*.csv' \) -exec head -n 1 {} \; | tr ',' '\n' | sort -u

如果您的文件具有 DOS 行结尾,则上述命令将不起作用。tr在这种情况下,您应该使用or删除回车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
于 2019-04-25T17:40:36.510 回答