这是一个经常出现的主题,但仍然不重复,因为我尝试了所有解决方案,但没有一个对我有用。
我正在尝试将后缀“_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