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

❯ cat file1.csv
column1,column2,column3
3,1,3
4,3,9
❯ cat file2.csv
column1,column2,column3
5,4,1
1,8,2

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

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

我试过的是:

  • echo "$(ls -AU | head -1)"获取一个文件的第一行
  • 我想过try 断言所有文件的第一行都有这个值(最好是作为一个简洁的管道,而不是for个循环),但我想不出该怎么做
  • 我try 在这里使用答案https://unix.stackexchange.com/a/533917,它使用uniqwc,但这两个命令似乎都特定于迭代单个文件的行(而不是迭代通用的列表输出)

推荐答案

使用GNU sedbash时:

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

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

Linux相关问答推荐

为什么仅使用&i-i标志时仍会从容器进程中输出

Linux和Windows x86程序集调用约定

一个关于Linux中的fork()和物理地址的奇怪问题

erlang 格式的 utf8 变为 \x(反斜杠 x)ascii 编码

awk/sed 命令仅在模式 2 匹配时打印模式 1

Bash 更新 yaml 文件中的图像值

如何让 Flutter 用鼠标拖动而不是滚轮滚动? (Linux)

tmux:挂起不加载,不响应任何选项命令

如何在 Linux 命令行上解析 CSV 文件?

Bash 变量:是否区分大小写?

如何将执行的shell命令的结果存储在python的变量中?

仅在不存在时添加换行符

execv() 和 fork() 的时间浪费

使用 C++ 和 Linux 的高分辨率计时器?

如何通过命令提示符判断 Linux 中的 BIOS 版本或名称?

在 shell 脚本的 for 循环中迭代行而不是单词

PHP exec - 判断是否启用或禁用

Bash:如何标记字符串变量?

内联 if shell 脚本

如何通过命令行识别特定的 Linux 风格?