sed를 사용하여 열을 추가할 때 형식 오류가 발생합니다.

sed를 사용하여 열을 추가할 때 형식 오류가 발생합니다.

테이블이 있고 각 행에 파일 이름이 포함된 열을 추가하고 싶습니다. 아래에 예를 게시하겠습니다. 입력 내용은 다음과 같습니다.

SPATA17 1   217947738
LYPLAL1 1   219383905
FAM47E  4   77192838
SHROOM3 4   77660162
SHROOM3 4   77660731
SHROOM3 4   77662248

출력은 다음과 같습니다.

SPATA17 1   217947738 file1
LYPLAL1 1   219383905 file1
FAM47E  4   77192838  file1
SHROOM3 4   77660162  file1
SHROOM3 4   77660731  file1
SHROOM3 4   77662248  file1

아주 유용하게 적용했어요해결책이 포럼에서 제안하셨는데(해결책은 sed 기능을 사용하는 것입니다 :) for f in file1 file2 file3; do sed -i "s/$/\t$f/" $f; done문제가 좀 있습니다. 출력이 예상과 다릅니다. 이것이 Vim을 사용하여 시각화하는 방법입니다.

SPATA17 1   217947738^M file1
LYPLAL1 1   219383905^M file1
FAM47E  4   77192838^M  file1
SHROOM3 4   77660162^M  file1
SHROOM3 4   77660731^M  file1
SHROOM3 4   77662248^M  file1

새 줄(\n)을 먼저 제거해야 하기 때문에 이것이 버그일까요? 이 솔루션이 나에게 적합하지 않다는 것을 알았습니다.

답변1

이는 원본 파일에 이미 존재하는 "캐리지 리턴" ^M입니다 . \r다음을 사용하여 삭제할 수 있습니다.

sed -i 's/\r//' file1 file2 file3

답변2

\r루프를 제거하는 대신 다음으로 교체할 수 있습니다.

sed -ni 'P;F' file1 file2 file3 …
^P;F^N;s/\n/\t/p^

관련 정보