識別子リストにサフィックスを追加中にエラーが発生しました。

識別子リストにサフィックスを追加中にエラーが発生しました。

これは繰り返しのトピックですが、すべての解決策を試しましたが、それらのどれも私には効果がなかったので、まだ繰り返されませんでした。

txtファイルから取得した識別子のリストにサフィックス「_1」を追加しようとしています。目標は、関数のループに追加することです。

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

最後に、元のファイルを変更したくない場合は、質問の方法の1つを使用できますが、| tr -d '\r'最後に1つだけを追加するだけです。たとえば、

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

おすすめ記事