두 텍스트 파일에서 줄을 인터리브하는 방법
두 개 (또는 그 이상)의 텍스트 파일을 인터리브하는 가장 쉽고 빠른 방법은 무엇입니까? 예:
파일 1 :
line1.1
line1.2
line1.3
파일 2 :
line2.1
line2.2
line2.3
인터리브 :
line1.1
line2.1
line1.2
line2.2
line1.3
line2.3
물론 둘 다 열고 작업을 수행하는 작은 Perl 스크립트를 작성하는 것은 쉽습니다. 그러나 나는 더 적은 코드, 아마도 유닉스 도구를 사용하는 한 줄의 코드로 벗어날 수 있는지 궁금합니다.
paste -d '\n' file1 file2
다음을 사용하는 솔루션은 다음과 같습니다 awk
.
awk '{print; if(getline < "file2") print}' file1
다음 출력을 생성합니다.
line 1 from file1
line 1 from file2
line 2 from file1
line 2 from file2
...etc
awk
출력에 추가 형식을 추가하려는 경우에 사용하면 유용 할 수 있습니다. 예를 들어 어떤 파일에서 오는지에 따라 각 행에 레이블을 지정하려는 경우 :
awk '{print "1: "$0; if(getline < "file2") print "2: "$0}' file1
다음 출력을 생성합니다.
1: line 1 from file1
2: line 1 from file2
1: line 2 from file1
2: line 2 from file2
...etc
참고 :이 코드는 file1이 file2보다 크거나 같은 길이라고 가정합니다.
file1에 file2보다 많은 줄이 포함되어 있고 file2가 완료된 후 빈 줄을 출력하려면 getline 테스트에 else 절을 추가합니다.
awk '{print; if(getline < "file2") print; else print ""}' file1
또는
awk '{print "1: "$0; if(getline < "file2") print "2: "$0; else print"2: "}' file1
@Sujoy의 답변 은 유용한 방향으로 가리 킵니다. 줄 번호를 추가하고, 정렬하고, 줄 번호를 제거 할 수 있습니다.
(cat -n file1 ; cat -n file2 ) | sort -n | cut -f2-
(나에게 관심이있는) 정적 파일 대신 서로 느리거나 빠르게 실행될 수있는 명령의 출력을 사용하는 경우 순서를 올바르게 지정하려면 약간 더 많은 작업이 필요합니다. 이 경우 줄 번호 외에 다른 태그를 추가 / 정렬 / 제거해야합니다.
(cat -n <(command1...) | sed 's/^/1\t/' ; cat -n <(command2...) | sed 's/^/2\t/' ; cat -n <(command3) | sed 's/^/3\t/' ) \
| sort -n | cut -f2- | sort -n | cut -f2-
이를위한 GUI 방법은 다음과 같습니다. 스프레드 시트의 두 열에 붙여넣고 모든 셀을 복사 한 다음 정규식을 사용하여 탭을 줄 바꿈으로 바꿉니다.
cat file1 file2 |sort -t. -k 2.1
여기서 구분자는 "."로 지정되었습니다. 두 번째 필드의 첫 번째 문자를 기준으로 정렬합니다.
참고 URL : https://stackoverflow.com/questions/4011814/how-to-interleave-lines-from-two-text-files
'Programing' 카테고리의 다른 글
Linux : 주어진 폴더 및 콘텐츠에 대해 단일 해시를 계산합니까? (0) | 2020.10.24 |
---|---|
암시 적 인터페이스와 명시 적 인터페이스 구현 (0) | 2020.10.24 |
mysql 기간 및 가져 오기 시간 (0) | 2020.10.24 |
컬 포스트 데이터 및 헤더 만 (0) | 2020.10.24 |
PHP 양식 제출에서 어떤 버튼이 클릭되었는지 어떻게 알 수 있습니까? (0) | 2020.10.24 |