Если у вас включено расширение истории и вы запустите history -p "!23:1"
, расширение произойдет до встроенная функция history
увидит обозначение !23:1
, так как расширение истории происходит даже в двойных -кавычках.
Однако, если вы либо отключите расширение истории, либо защитите восклицательный знак одинарными кавычками или обратной косой чертой, чтобы встроенная функция обработала это, вы увидите, чтоhistory -p
выводит результат этой истории. расширение:
$ true
$ history -p '!!'
true
Я предполагаю, что цель этого состоит в том, чтобы иметь возможность записывать расширения истории.
Ваша проблема в том, что ваш файл имеет окончание строки в стиле 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
Используя ваш код awk '{ print $0, "_1" }' GSE72343.txt
, но без запятой:
awk '{ print $0 "_1" }' file
SRR2182285_1
SRR2182286_1
SRR2182287_1
SRR2182288_1
SRR2182289_1
en@praveen:~$ sed "s/$/_1/g" filename
SRR2182285_1
SRR2182286_1
SRR2182287_1
SRR2182288_1
SRR2182289_1
raveen:~$ awk '{print $0"_1"}' filename
SRR2182285_1
SRR2182286_1
SRR2182287_1
SRR2182288_1
SRR2182289_1
@praveen:~$ for i in `cat filename`
> do
> echo $i"_1"
> done
SRR2182285_1
SRR2182286_1
SRR2182287_1
SRR2182288_1
SRR2182289_1
Python
#!/usr/bin/python
import subprocess
k=open('filename','r')
for i in k:
print "{0}_1".format(i.strip())