Linux:将 CSV 文件的第一行更改为全部大写

Linux:将 CSV 文件的第一行更改为全部大写

我有一组 csv 文件,对于每个文件,第一行包含数据集的字段名称。某些 csv 文件的字段名称全部大写,其他文件的字段名称全部小写。我的问题是如何更改每个 csv 文件,以便每个文件的第一行(也称为字段名称)在每列中显示为所有大写字符串?

示例:Dataset1.csv

a b c
x x x

数据集2.csv

A B C
y y y

如何使 Dataset1.csv 如下所示?

A B C
x x x

答案1

这可以通过 GNU sed 的 Uppercase 选项来完成。就地选项-i

sed -i '1s/.*/\U&/' Dataset1.csv

答案2

我们可以使用 awk 和 GNU sed 来完成

方法1

awk 'NR==1{(i=toupper($0));print i}' Dataset1.csv ; awk 'NR >=2 {print $0}' Dataset1.csv

输出

A B C
x x x
z z z

方法二

sed '1s/.*/\U&/g' Dataset1.csv

输出

A B C
x x x
z z z

答案3

这是从 stackoverflow 重新发布的,因为有人告诉我我的问题与该网站的主题无关,我得到了以下答案:

考虑到您的文件以换行符结尾:

head -1 Dataset1.csv | tr '[:lower:]' '[:upper:]' > Dataset1_new.csv ; tail -$(( $(wc -l Dataset1.csv | cut -d ' ' -f 8) - 1 )) Dataset1.csv > Dataset1_new.csv

head -1 Dataset1.csv | tr '[:lower:]' '[:upper:]':获取文件的第一行,将其转换为大写并将其输出到标准输出

> Dataset1_new.csv:将输出重定向到名为 Dataset1_new.csv 的新文件

tail -$(( $(wc -l Dataset1.csv | cut -d ' ' -f 8) - 1 ))Dataset1.csv:输出其余行

> Dataset1_new.csv:再次将输出重定向到我们的 Dataset1_new.csv 文件

你可以使用 GNU sed 来做到这一点:

$ sed -i -e '1 s/\(.*\)/\U\1/' input.csv

您还可以使用 awk 来实现此目的:

awk -i.bak 'NR==1{ print toupper($0) }NR>1' Dataset1.csv

说明:

awk 将备份您的 csv 文件,然后对于第一行(NR==1)将整行 $0 更改为大写,然后对于文件的其余部分(NR>1)将执行默认操作,即打印线。

相关内容