Ошибка добавления суффикса в список идентификаторов

Если у вас включено расширение истории и вы запустите history -p "!23:1", расширение произойдет до встроенная функция historyувидит обозначение !23:1, так как расширение истории происходит даже в двойных -кавычках.

Однако, если вы либо отключите расширение истории, либо защитите восклицательный знак одинарными кавычками или обратной косой чертой, чтобы встроенная функция обработала это, вы увидите, чтоhistory -pвыводит результат этой истории. расширение:

$ true
$ history -p '!!'
true

Я предполагаю, что цель этого состоит в том, чтобы иметь возможность записывать расширения истории.

1
07.04.2021, 18:02
3 ответа

Ваша проблема в том, что ваш файл имеет окончание строки в стиле 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
5
28.04.2021, 22:53

Используя ваш код awk '{ print $0, "_1" }' GSE72343.txt, но без запятой:

awk '{ print $0 "_1" }' file
SRR2182285_1
SRR2182286_1
SRR2182287_1
SRR2182288_1
SRR2182289_1
0
28.04.2021, 22:53
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())
-2
28.04.2021, 22:53

Теги

Похожие вопросы