식별자 목록에 접미사를 추가하는 중 오류가 발생했습니다.

식별자 목록에 접미사를 추가하는 중 오류가 발생했습니다.

이것은 반복되는 주제이지만 모든 솔루션을 시도했지만 그 중 어느 것도 나에게 효과가 없었기 때문에 여전히 반복되지는 않았습니다.

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

마지막으로 원본 파일을 수정하고 싶지 않은 경우 질문에 있는 방법 중 하나를 사용할 수 있지만 | 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

관련 정보