我有一组 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)将执行默认操作,即打印线。