
나는 이것에 대한 답을 찾기 위해 여기와 다른 몇 곳을 샅샅이 뒤져 보았지만 너무 멍청할 정도로 단순해서 아무도 대답하지 않았습니다. 내가 해야 할 일은 모든 줄의 끝에 새 열의 단일 값을 추가하는 것뿐입니다. 내가 찾은 가장 가까운 것은 sed -i "s/$/green/" ./test.txt
다음 줄에 녹색 값을 추가하는 것입니다. 현재 최종 열 뒤에 새 열로 추가해야 합니다.
다음과 같은 파일이 있습니다.
chr - xyz ordered_A01 5480 6144
chr - xyz ordered_A01 5480 58001
다음과 같이 표시되어야 합니다.
chr - xyz ordered_A01 5480 6144 green
chr - xyz ordered_A01 5480 58001 green
하지만 대신에 나는 이것을 얻습니다:
chr - xyz ordered_A01 5480 6144
green
chr - xyz ordered_A01 5480 5801
green
답변1
귀하의 질문에 있는 sed 명령이 실제로 정확합니다. 새 줄에 결과가 표시되는 경우 터미널이 좁도록 설정되어 랩이 표시되거나 이 예에서 표시되지 않는 실제 환경에 코드가 포함되어 있는 것입니다. 그대로 작동하지만 알아야 할 두 가지 문제가 있습니다.
$
큰따옴표로 묶인 문자열 내에서 표현식의 일부로 사용하는 것은 위험합니다. 일반적으로 이는 bash 변수로 확장됩니다. 이 경우에는 그 뒤의 문자가 유효하고 가치 있는 이름이 아니기 때문에 무시할 수 있지만/
, 이를 방지하려면 표현식 주위에 작은따옴표를 사용해야 합니다.항목을 열로 정렬하려면 줄 끝과 추가하는 값 사이에 일종의 구분 기호를 포함해야 합니다. 탭은 이 작업을 수행하는 가장 간단한 방법일 수 있지만 다른 필드 사이에 이미 있는 구분 기호를 사용해야 할 수도 있습니다.
결합된 고정 명령은 다음과 같습니다.
sed -i 's/$/\tgreen/' ./test.txt
결과가 원하는 방식으로 정렬되지 않은 경우 데이터를 col
파이핑하여 열을 정렬할 수 있습니다.
귀하가 우리에게 보여주지 않는 한 문제는 아마도 귀하의 데이터 파일에 있을 것입니다. 댓글에서 워드패드와 엑셀을 언급하셨기 때문이죠. Windows/Unix 환경이 혼합되어 있는 것 같습니다. 문제는 데이터 파일에 줄이 끝나기 전에 인쇄되지 않는 쓰레기 시퀀스가 있다는 것입니다. 그것을 정리하기 위해 뭔가를 해야 합니다. 간단한 것 sed 's/\s*$//'
(마지막 줄 바꿈을 제외하고 줄 끝의 모든 공백 문자 제거)을 시작하는 것이 하나의 장소일 수 있지만 dos2unix 변환기와 같은 고급 시스템이 더 나은 결과를 제공할 수 있습니다. 거기에 바이너리 쓰레기가 있고 파일이 ASCI 텍스트여야 한다면 tr -cd '\11\12\15\40-\176'
.
답변2
다음을 사용할 수 있습니다 awk
.
awk '{printf "%s", $0 "\tgreen\n"}' infile > outfile
답변3
Ex 모드에서 Vim을 사용할 수 있습니다:
ex -sc '%s/$/\tgreen/|x' test.txt
%
모든 라인을 선택\t
탭x
저장하고 닫습니다