これは繰り返しのトピックですが、すべての解決策を試しましたが、それらのどれも私には効果がなかったので、まだ繰り返されませんでした。
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
答え2
awk '{ print $0, "_1" }' GSE72343.txt
コンマなしでコードを使用してください。
awk '{ print $0 "_1" }' file
SRR2182285_1
SRR2182286_1
SRR2182287_1
SRR2182288_1
SRR2182289_1