両方の行を1つの行にマージする方法

両方の行を1つの行にマージする方法

私はこのファイルを持っています:

~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編集スクリプトはコマンドを使用して1行を読み取り、次の行を追加します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間にスペースがある2つの出力列を作成する必要があります。これらの列は入力の行から読み取られ、行をペアで連結する効果を提供します。

そして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

おすすめ記事