열 추가

열 추가

나는 이 질문에 대한 답을 찾기 위해 여기와 다른 몇 군데를 검색해 보았지만 너무 간단해서 아무도 대답하지 않았습니다. 내가 해야 할 일은 새 열의 각 행 끝에 단일 값을 추가하는 것뿐입니다. 내가 찾은 가장 가까운 것은 을 사용하는 것이지만 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 명령이 실제로 정확합니다. 새 줄에 결과가 표시되면 터미널이 좁게 설정되어 줄 바꿈만 표시되거나 실제 환경에 이 예제에 표시되지 않은 코드가 포함되어 있는 것입니다. 있는 그대로 작동하지만 알아야 할 두 가지 문제가 있습니다.

  1. $큰따옴표로 묶인 문자열 내에서 표현식의 일부로 사용하는 것은 위험합니다. 일반적으로 bash 변수로 확장됩니다. 이 경우 뒤에 오는 문자가 유효하고 가치 있는 이름이 아니기 때문에 이스케이프 처리 /하지만 이를 방지하려면 표현식 주위에 작은따옴표를 사용해야 합니다.

  2. 내용을 열로 정렬하려면 줄 끝과 추가하려는 값 사이에 일종의 구분 기호를 포함해야 합니다. 탭 문자는 이 작업을 수행하는 가장 쉬운 방법일 수 있지만 다른 필드 사이에 이미 있는 구분 기호를 사용해야 할 수도 있습니다.

결합된 고정 명령은 다음과 같습니다.

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
  1. %모든 행 선택

  2. \t상표

  3. x저장하고 닫습니다

관련 정보