열 추가

열 추가

나는 이것에 대한 답을 찾기 위해 여기와 다른 몇 곳을 샅샅이 뒤져 보았지만 너무 멍청할 정도로 단순해서 아무도 대답하지 않았습니다. 내가 해야 할 일은 모든 줄의 끝에 새 열의 단일 값을 추가하는 것뿐입니다. 내가 찾은 가장 가까운 것은 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파이핑하여 열을 정렬할 수 있습니다.

귀하가 우리에게 보여주지 않는 한 문제는 아마도 귀하의 데이터 파일에 있을 것입니다. 댓글에서 워드패드와 엑셀을 언급하셨기 때문이죠. 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저장하고 닫습니다

관련 정보