如何验证所有 csv 文件是否具有相同的第一行?

mau*_*era 2 linux bash shell awk

我有一个包含许多 csv 文件的目录。我想要一个shell脚本来检查每个文件的第一行是否相同。例如,这些文件具有相同的标头,因此检查应返回 True。

\n
\xe2\x9d\xaf cat file1.csv\ncolumn1,column2,column3\n3,1,3\n4,3,9\n\xe2\x9d\xaf cat file2.csv\ncolumn1,column2,column3\n5,4,1\n1,8,2\n
Run Code Online (Sandbox Code Playgroud)\n

我认为这是一个已经被问到的问题,但我还没有在 Stackoverflow 上看到它。

\n

这个问题是类似的,它检查一个文件中的所有行是否相同:https://unix.stackexchange.com/questions/533915/check-if-all-lines-in-a-file-are-same ://unix.stackexchange.com/questions/533915/check-if-all-lines-in-a-file-are-same 。

\n

我尝试过的:

\n
    \n
  • echo "$(ls -AU | head -1)"获取一个文件的第一行
  • \n
  • 我想过尝试断言所有文件都将此值作为第一行(最好是简洁的管道而不是for循环),但无法弄清楚如何做到这一点
  • \n
  • 我尝试使用此处的答案https://unix.stackexchange.com/a/533917,它使用uniqwc,但这两个命令似乎都特定于迭代单个文件的行(而不是迭代通用列表输出) )
  • \n
\n

Cyr*_*rus 6

使用 GNUsedbash

rows=$(sed -s '1!d' *.csv | sort -u | wc -l)
if [[ "$rows" -eq 1 ]]; then echo "true"; else echo "false"; fi
Run Code Online (Sandbox Code Playgroud)

sed -s '1!d' *.csv输出到 stdout 当前目录中后缀为 的所有文件的第一行.csv

  • 我在想`head -q -n 1 *.csv | 排序 -u | wc -l`,但不确定哪个可以更好地扩展更多文件 (2认同)