首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在linux中创建该列并将第二列的文件重命名为新列?

在linux中创建该列并将第二列的文件重命名为新列?
EN

Stack Overflow用户
提问于 2022-03-30 23:16:56
回答 2查看 69关注 0票数 1

示例数据:

代码语言:javascript
复制
cat lookup.tsv
SRR7015874_1.fastq
SRR7015874_2.fastq
SRR7015875_1.fastq
SRR7015875_2.fastq
SRR7015876_1.fastq
SRR7015876_2.fastq
SRR7015877_1.fastq
SRR7015877_2.fastq

使用此命令:

代码语言:javascript
复制
awk '{print $1 "\t" "SRR\_" NR ".fastq"}' lookup.tsv > lookup_table.tsv

我有两栏:

代码语言:javascript
复制
SRR7015874_1.fastq   SRR_1.fastq
SRR7015874_2.fastq   SRR_2.fastq
SRR7015875_1.fastq   SRR_3.fastq
SRR7015875_2.fastq   SRR_4.fastq
SRR7015876_1.fastq   SRR_5.fastq
SRR7015876_2.fastq   SRR_6.fastq
SRR7015877_1.fastq   SRR_7.fastq
SRR7015877_2.fastq   SRR_8.fastq

现在我想创建第三列,如下所示:

代码语言:javascript
复制
SRR1_1.fastq
SRR1_2.fastq
SRR2_1.fastq
SRR2_2.fastq
SRR3_1.fastq
SRR3_2.fastq
SRR4_1.fastq
SRR4_2.fastq

我希望使用第二列和第三列重命名文件(即,如果文件名= $2,将其更改为$3)

我试过:

代码语言:javascript
复制
cat lookup_table.tsv | while read c1 c2; do mv $c1 $c2 ; done
SRR1_1.fastq
SRR1_2.fastq
SRR2_1.fastq
SRR2_2.fastq
SRR3_1.fastq
SRR3_2.fastq

但这并不成功。我的代码/方法中有错误吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-30 23:53:11

这能解决你的问题吗?

代码语言:javascript
复制
awk '{print $1 "\t" "SRR_" NR ".fastq"}' lookup.tsv > tmp
awk 'END{for (i=1; i<=4; i++) for (j=1; j<=2; j++) print "SRR" i "_" j ".fastq"}' tmp > third_column.txt
paste tmp third_column.txt > lookup_table.txt
cat lookup_table.txt
SRR7015874_1.fastq  SRR_1.fastq SRR1_1.fastq
SRR7015874_2.fastq  SRR_2.fastq SRR1_2.fastq
SRR7015875_1.fastq  SRR_3.fastq SRR2_1.fastq
SRR7015875_2.fastq  SRR_4.fastq SRR2_2.fastq
SRR7015876_1.fastq  SRR_5.fastq SRR3_1.fastq
SRR7015876_2.fastq  SRR_6.fastq SRR3_2.fastq
SRR7015877_1.fastq  SRR_7.fastq SRR4_1.fastq
SRR7015877_2.fastq  SRR_8.fastq SRR4_2.fastq

while read -r c1 c2 c3; do mv "$c2" "$c3"; done < lookup_table.txt
票数 2
EN

Stack Overflow用户

发布于 2022-03-31 08:50:55

您可以使用NR和模块获得第三列的数据,每2行增加一次i,并使用另一个变量j,即1或2。

代码语言:javascript
复制
awk '{
  if (NR % 2 == 1) {++i; j=1} else {j=2}
  print $1 "\tSRR_" NR ".fastq\tSSR" i "_" j ".fastq"
}' lookup.tsv > lookup_table.tsv

文件lookup_table.tsv中的内容是

代码语言:javascript
复制
SRR7015874_1.fastq  SRR_1.fastq SRR1_1.fastq
SRR7015874_2.fastq  SRR_2.fastq SRR1_2.fastq
SRR7015875_1.fastq  SRR_3.fastq SRR2_1.fastq
SRR7015875_2.fastq  SRR_4.fastq SRR2_2.fastq
SRR7015876_1.fastq  SRR_5.fastq SRR3_1.fastq
SRR7015876_2.fastq  SRR_6.fastq SRR3_2.fastq
SRR7015877_1.fastq  SRR_7.fastq SRR4_1.fastq
SRR7015877_2.fastq  SRR_8.fastq SRR4_2.fastq

若要重命名文件:

代码语言:javascript
复制
while read c1 c2 c3; do mv "$c2" "$c3"; done < lookup_table.tsv
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71685141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档