我有大约 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
答案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