在标识符列表中添加后缀时出错

在标识符列表中添加后缀时出错

这是一个经常出现的主题,但仍然不重复,因为我尝试了所有解决方案,但没有一个对我有用。

我正在尝试将后缀“_1”添加到从 txt 文件导入的标识符列表中。目标是将其添加到函数的循环中。

GSE72343.txt:

SRR2182285
SRR2182286
SRR2182287
SRR2182288
SRR2182289

我想检索这个:

SRR2182285_1
SRR2182286_1
SRR2182287_1
SRR2182288_1
SRR2182289_1

我在其他线程中尝试了一些建议这里这里但我得到错误的输出,如下所示:

for i in $(cat GSE72343.txt); do echo "$i" "$i_1"; done
RR2182285
RR2182286
RR2182287
RR2182288
RR2182289

sed 's/$/ _1/' GSE72343.txt 
 _12182285
 _12182286
 _12182287
 _12182288
 _12182289



awk '{ print $0, "_1" }' GSE72343.txt
 _12182285
 _12182286
 _12182287
 _12182288
 _12182289

有什么建议吗?多谢!

答案1

这里的问题是您的文件具有 Windows 样式的行结尾 ( \r\n)。这就是你的命令失败的原因。如果您修复该文件,它们应该按预期工作。如果你有dos2unix,你可以这样做:

dos2unix GSE72343.txt

但如果没有,你也可以这样做sed

sed -i 's/\r$//' GSE72343.txt

之后您的命令将起作用(稍作更改)。并且,作为概念证明:

$ printf 'SRR2182285\r\nSRR2182286\r\n' > GSE72343.txt

$ cat GSE72343.txt
SRR2182285
SRR2182286

$ for i in $(cat GSE72343.txt); do echo "$i" "${i}_1"; done
 RR2182285
 RR2182286

$ sed -i 's/\r$//' GSE72343.txt

$ for i in $(cat GSE72343.txt); do echo "$i" "${i}_1"; done
SRR2182285 SRR2182285_1
SRR2182286 SRR2182286_1

最后,如果您不想修改原始文件,您可以使用问题中的任何方法,但只需| tr -d '\r'在末尾添加一个即可。例如:

$ sed 's/$/_1/' GSE72343.txt | tr -d '\r'
SRR2182285_1
SRR2182286_1
SRR2182287_1
SRR2182288_1
SRR2182289_1

答案2

使用您的代码awk '{ print $0, "_1" }' GSE72343.txt但不带逗号:

awk '{ print $0 "_1" }' file
SRR2182285_1
SRR2182286_1
SRR2182287_1
SRR2182288_1
SRR2182289_1

相关内容