두 행을 모두 하나의 행으로 병합하는 방법

두 행을 모두 하나의 행으로 병합하는 방법

나는 이 파일을 가지고 있습니다 :

~path1/file1.txt ~path1/file1_newname
par1 par2 par 53
~path1/file2.txt ~path1/file2_newname
par1 par2
~path1/file3.txt ~path1/morepath/file3_newname
par31 par121
~path2/file1.txt ~path2/file1_newname
par87
~path2/file3.txt ~path2/file3_newname
par1
~path2/file4.txt ~path2/file4_newname
par2 par3 par4
~path3//path4/file3.txt ~path3/file4_newname
par13

나는 이것으로 끝나기를 바랍니다 :

~path1/file1.txt ~path1/file1_newname par1 par2 par 53
~path1/file2.txt ~path1/file2_newname par1 par2
~path1/file3.txt ~path1/morepath/file3_newname par31 par121
~path2/file1.txt ~path2/file1_newname par87
~path2/file3.txt ~path2/file3_newname par1
~path2/file4.txt ~path2/file4_newname par2 par3 par4
~path3//path4/file3.txt ~path3/file4_newname par13

나는 그것을 정리하려고 노력했지만 sort -k성공하지 못했습니다.

정렬하려면 어떻게 해야 하나요?

답변 후 새로운 패턴을 표시하도록 편집되었습니다.

~/path1/file1.cob ~/path1/file1_namename
 param1 param2 param90 ~/path1/file2.cob ~/path1/file2_namename
 param1 param2
~/path1/file3.cob ~/path1/path2/file3_namename
 param15 param124 ~/path2/file1.cob ~/path2/file1_namename.cob
 param55
~/path2/file2.cob ~/path2/file2_namename.cob
 param1 ~/path2/file5.cob ~/path4/file2_namename.cob param23
~/path3/file2.cob ~/path2/file4_namename.cob
 param2 param3 param4 ~/path3/path1/file3.cob ~/path3/file2_namename.cob
 param3

답변1

주문과는 관련이 없으니 참고해주세요. 선을 서로 연결하는 것뿐입니다.

이러한 솔루션에서는 항상 라인을 쌍으로 연결하려고 한다고 가정합니다.

사용 표준 sed:

$ sed 'N; s/\n/ /' file
~path1/file1.txt ~path1/file1_newname par1 par2 par 53
~path1/file2.txt ~path1/file2_newname par1 par2
~path1/file3.txt ~path1/morepath/file3_newname par31 par121
~path2/file1.txt ~path2/file1_newname par87
~path2/file3.txt ~path2/file3_newname par1
~path2/file4.txt ~path2/file4_newname par2 par3 par4
~path3//path4/file3.txt ~path3/file4_newname par13

짧은 sed편집 스크립트는 명령을 사용하여 한 줄을 읽고 다음 줄을 추가합니다 N. 추가된 줄은 개행 문자가 포함된 패턴 공간("작업 버퍼")에 추가되므로 해당 줄은 인쇄하기 전에 대체된 공간으로 대체됩니다.

또는 다음을 사용하여 paste:

$ paste -d ' ' - - <file
~path1/file1.txt ~path1/file1_newname par1 par2 par 53
~path1/file2.txt ~path1/file2_newname par1 par2
~path1/file3.txt ~path1/morepath/file3_newname par31 par121
~path2/file1.txt ~path2/file1_newname par87
~path2/file3.txt ~path2/file3_newname par1
~path2/file4.txt ~path2/file4_newname par2 par3 par4
~path3//path4/file3.txt ~path3/file4_newname par13

이를 위해서는 paste사이에 공백이 있는 두 개의 출력 열을 생성해야 합니다. 이러한 열은 입력의 행에서 읽혀져 행을 쌍으로 연결하는 효과를 제공합니다.

그리고 awk:

$ awk '{ getline nextline; print $0, nextline }' file
~path1/file1.txt ~path1/file1_newname par1 par2 par 53
~path1/file2.txt ~path1/file2_newname par1 par2
~path1/file3.txt ~path1/morepath/file3_newname par31 par121
~path2/file1.txt ~path2/file1_newname par87
~path2/file3.txt ~path2/file3_newname par1
~path2/file4.txt ~path2/file4_newname par2 par3 par4
~path3//path4/file3.txt ~path3/file4_newname par13

답변2

내가 올바르게 이해했다면 이것이 당신에게 도움이 될 것이라고 생각합니다 (GNU 사용 sed):

sed '1~2N;s/\n/ /' file

관련 정보