根据文件名更改列名

根据文件名更改列名

我有大约 52 个文件,名称类似:ERR260147.genefamilies.tsv, ERR260158.genefamilies.tsv ERR275198.genefamilies.tsv, etc,每个文件有两列。我想根据文件的名称更改每个文件的第二列名称。例如,文件的第二列名称ERR260147.genefamilies.tsv将命名为类似ERR260147_Abundance-RPKs,而文件的第二列名称ERR275198.genefamilies.tsv将命名为ERR275198_Abundance-RPKs。请注意,列名称的一部分将来自文件名和常量“_Abundance-RPK”

请帮助我。我对 Linux 不太熟悉。

谢谢...

答案1

我假设你正在使用 Ubuntu GNOME。打开文件夹位置,选择所有这 52 个文件,右键单击并选择重命名。

在类型中选择Find and replace text,和,在类型中选择,然后点击重命名按钮。Existing Text.genefamilies.tsvReplace With_Abundance-RPKs

在此处输入图片描述

您还可以在重命名文件之前进行预览

答案2

你可以在 awk 中做这样的事情

awk -F'\t' 'BEGIN{OFS=FS} FNR==1 {split(FILENAME,a,/\./); $2 = a[1] "_Abundance-RPKs"} 1' *.genefamilies.tsv

如果你有最新版本的 GNU awk(又名gawk),那么一旦你确信它正在做正确的事情,你可以就地应用更改,例如

$ head *.genefamilies.tsv
==> ERR260147.genefamilies.tsv <==
foo     bar
123     456
abc     def

==> ERR260158.genefamilies.tsv <==
foo     bar
123     456
abc     def

==> ERR275198.genefamilies.tsv <==
foo     bar
123     456
abc     def

然后

gawk -i inplace -F'\t' 'BEGIN{OFS=FS} FNR==1 {split(FILENAME,a,/\./); $2 = a[1] "_Abundance-RPKs"} 1' *.genefamilies.tsv

结果是

$ head *.genefamilies.tsv                                                                                                        ==> ERR260147.genefamilies.tsv <==
foo     ERR260147_Abundance-RPKs
123     456
abc     def

==> ERR260158.genefamilies.tsv <==
foo     ERR260158_Abundance-RPKs
123     456
abc     def

==> ERR275198.genefamilies.tsv <==
foo     ERR275198_Abundance-RPKs
123     456
abc     def

相关内容