私はこのファイルを持っています:
~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
答え2
私が正しく理解したら、これがあなたに役立つと思います(GNUを使用sed
):
sed '1~2N;s/\n/ /' file