나는 이 질문에 대한 답을 찾기 위해 여기와 다른 몇 군데를 검색해 보았지만 너무 간단해서 아무도 대답하지 않았습니다. 내가 해야 할 일은 새 열의 각 행 끝에 단일 값을 추가하는 것뿐입니다. 내가 찾은 가장 가까운 것은 을 사용하는 것이지만 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
열을 정렬하는 것을 고려할 수 있습니다.
귀하가 우리에게 보여주지 않는 것은 귀하의 데이터 파일에 문제가 있을 수 있습니다. 귀하의 의견에서 워드패드와 Excel을 언급하셨기 때문입니다. 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
저장하고 닫습니다