sedまたはawkを使用してパターンの行を結合しますか?

sedまたはawkを使用してパターンの行を結合しますか?

この入力を開く方法がわかりません。

A
B
C
apartner
bpartner
cpartner

次の出力を入力します。

A apartner
B bpartner
c cpartner

このパターンは80行ファイルにあり、40行が必要です。また、各項目をにどのように添付できますか<il><b>A</b> <i>apartner</i></il>

答え1

使用先prcoreutils

pr -2 -t -l 40 -s' ' $oldfile > $newfile

同じように使用しprてタグを追加してくださいsed

pr -2 -t -l 40 -J -S'</b> <i>' $oldfile | sed 's|^|<il><b>|;s|$|</i></il>|' > $newfile

出力:

<il><b>A</b> <i>apartner</i></il>
<il><b>B</b> <i>bpartner</i></il>
<il><b>C</b> <i>cpartner</i></il>

答え2

[牛に似た一種の栄養]

使用法が重要でない場合は、sed最もawk簡単な解決策として以下をお勧めします。

まず、ファイルを2つの部分に分割します。

head -n 40 file >file1
tail -n 40 file >file2

次に、次の行を結合します。

paste --delimiters=" " file1 file2

もちろん、headandの代わりにorを使うことができます。tailsedawk

sed -n -e 1,40p combinedfile >file1
sed -n -e 41,80p combinedfile >file2
awk 'NR < 41 {print;}' combinedfile >file1
awk 'NR > 40 {print;}' combinedfile >file2

さて、ちょうど気づきました。純粋なawkソリューションは思ったほど複雑ではありません。

awk 'NR < 41 { lines[NR]=$0; next; }; {print lines[NR-40],$0}' combinedfile

関連情報