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

cra*_*ray 5 csv bash awk sed

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

我对它的尝试如下:首先,我手动检查所有文件以查看哪些文件具有大写和小写的列名,然后运行以下命令:

head -1 uppercase.csv > header.csv
#repeated all commands below for all lowercase files individually
sed -i 1d lowercase.csv 
cat header.csv lowercase.csv > lowercase_new.csv
rm lowercase.csv
mv lowercase_new.csv lowercase.csv
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更自动化的方法来执行此操作,而无需手动浏览每个文件.

例子:

Dataset1.csv

a b c
x x x
Run Code Online (Sandbox Code Playgroud)

Dataset2.csv

A B C
y y y
Run Code Online (Sandbox Code Playgroud)

如何使Dataset1.csv如下所示?

A B C
x x x
Run Code Online (Sandbox Code Playgroud)

Rav*_*h13 7

以下简单awk也可以帮助你.

awk 'NR==1{$0=toupper($0)} 1'  Input_file
Run Code Online (Sandbox Code Playgroud)

说明:: NR==1如果是第一行,则检查条件,然后执行以下操作:

$0=toupper($0) 将当前行的值设置为UPPER CASE并保存到它.

1 awk 在条件的方法,然后行动,所以我在这里条件为TRUE,并没有在这里提到任何动作,所以默认情况下将打印当前行.

如果您想将输出保存到Input_file本身,请在上面的解决方案中附加以下内容> temp_file && mv temp_file Input_file.其中Input_file是您要更改或传递给的数据文件awk.

  • 最后 - 一个明智的答案! (2认同)

Gon*_*heu 5

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

$ sed -i -e '1 s/\(.*\)/\U\1/' input.csv
Run Code Online (Sandbox Code Playgroud)