나는 이 파일을 가지고 있습니다 :
~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