![입력 파일의 후속 행을 다른 파일의 각 행 끝까지 삽입하는 방법은 무엇입니까?](https://linux55.com/image/191341/%EC%9E%85%EB%A0%A5%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%ED%9B%84%EC%86%8D%20%ED%96%89%EC%9D%84%20%EB%8B%A4%EB%A5%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EA%B0%81%20%ED%96%89%20%EB%81%9D%EA%B9%8C%EC%A7%80%20%EC%82%BD%EC%9E%85%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
로그 출력이 포함된 파일이 두 개 있습니다. 아래 설명된 대로 참여해야 합니다.
첫 번째 파일
Line 1
Line 2
Line 3
두 번째 파일
Need to be placed at the end of Line 1
Need to be placed at the end of Line 2
Need to be placed at the end of Line 3
예상되는 결과:
Line 1 Need to be placed at the end of Line 1
Line 2 Need to be placed at the end of Line 2
Line 3 Need to be placed at the end of Line 3
sed를 사용하여 텍스트/입력 파일을 추가하는 방법을 알고 있지만 파일인 경우 파일의 모든 내용을 삽입하므로 이는 내가 찾고 있는 것이 아닙니다. 어떤 도움이라도 감사하겠습니다 :)
답변1
파일을 한 줄씩 "함께 결합"해야 한다고 가정하면 paste
.
이 paste
유틸리티는 하나 이상의 파일에서 입력을 받아 "나란히 붙여넣은" 파일로 구성된 출력을 생성합니다. 이 paste
유틸리티는 명령줄에 나열된 파일 열을 생성합니다.
paste first_file second_file
기본 탭 대신 공백을 파일 사이의 구분 기호로 사용하려면 paste
다음 -d
옵션과 함께 사용하십시오.
paste -d ' ' first_file second_file
paste
또한 시스템의 설명서를 참조하십시오.
어떤 의미에서는 paste
필드/열 추출과 반대입니다.cut
답변2
사용 awk
:
awk 'NR==FNR { arr[NR]=$0; next}{ printf "%s %s\n", arr[FNR], $0 }' first_file second_file
NR==FNR{ arr[NR]=$0
arr
그러면 첫 번째 파일에 대해 행(레코드 번호)으로 색인화된 배열이 생성됩니다. 이는 awk가 두 번째 파일 읽기를 시작할 때 FNR이 0으로 설정되고 NR은 지금까지 모든 파일에서 읽은 총 레코드이기 때문입니다. 즉, 새 파일 읽기가 시작되면 NR은 0으로 설정되지 않습니다.
이 next
명령문은 awk에게 현재 레코드 처리(행 읽기)를 중지하고 다음 레코드로 이동하도록 지시합니다. 이는 현재 줄에서 더 이상 명령이 실행되지 않음을 의미합니다. 따라서 배열이 생성된 후 첫 번째 파일에서는 arr
명령문이 실행되지 않습니다 .printf
다음으로 두 번째 파일의 모든 레코드를 printf
인쇄합니다 .arr
나는 아무것도 하지 않았지만약간변경된 명령은 다음에서 가져옵니다.이 답변.