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