Linuxでテキストをフォーマットする

Linuxでテキストをフォーマットする

私のシステムにインポートする必要があるファイルのデータ型を指定しようとしています。このシステムでは、テキストの1行の長さは65文字を超えません。そこで、以下の例のように説明列のテキストを複数行にフォーマットしてみました。 1行のLinuxコマンドであれば、ユーザーにとって本当に役に立ちます。動作していることを確認できますか?

ファイルからの入力例 -

 
深さの説明
(足)-
12370.0 LS: Mdst, blsh gry, sft, occ modfirm, crpxln, prly, arg, SLTST: blk, Firm-mod hd, amor, gt, mod calc, CLST: lt gry-m gry, sft, amor, wxy
12400.0 LS: Mdst, blsh gry, modfirm, crpxln, chky, arg, SLTST: blk-dk gry, Firm-mod hd, amor, gt, mod calc, CLST: lt gry-m gry, occ rdsh gry, modfirm, love 、wxy、tr CHK
12430.0 LS: Mdst, blsh gry, modfirm, crpxln, chky, arg, SLTST: blk-dk gry, Firm-mod hd, amor, gt, mod calc, SH: blk-dk gry, modfirm, blky-plty, OCCUK人々,wxy
12460.0 SH: blk-dk gry, modfirm, blky-plty, occ brit, ea, SLTST: blk-dk gry, Firm-mod hd, amor, gt, mod calc, SST: gry-dk gry, wl consol, vf, ang, p srt, cotd, slily calc cmt, フッ素

深さと説明とその下の行はタイトルと見なされます。 Depth列にはすべての数値が含まれ、Description列にはシステムがデータを受け入れるために複数行にフォーマットする必要があるテキストが含まれています。

Linuxコマンドで希望の出力 -

 
深さの説明
(足)-
12370.0 LS: Mdst, blsh gry, sft, occ modfirm,
        crpxln, prly, arg, SLTST: blk, 会社モード hd,
        amor, gt, mod calc, CLST: lt gry-m gry, sft,
        愛,wxy
12400.0 LS:Mdst、blsh gry、modfirm、crpxln、chky、
        arg, SLTST: blk-dk gry, Firm-mod hd, 愛,
        gt, mod calc, CLST: lt gry-m gry, occ rdsh gry,
        モードロバスト、愛、wxy、tr CHK
12430.0 LS:Mdst、blsh gry、modfirm、crpxln、chky、
        arg, SLTST: blk-dk gry, Firm-mod hd, 愛,
        gt、mod calc、SH:blk-dk gry、modfirm、
        blky-plty, OCC UK, wxy
12460.0 SH: blk-dk gry, modfirm, blky-plty, occ Brit,
        ea, SLTST: blk-dk gry, Firm-mod hd, amor, gt,
        モード計算、SST: gry-dk gry, wl consol, vf, ang,
        p srt, cotd, 滑りやすい石灰質 cmt, フッ素

注 – ユーザーは自分のコンピュータに Linux パッケージをインストールできません。 (例 - 波)

ベストアンサー1

標準awk:

{ printf("%s\t", $1) }
{
    linelen = 8;  # assume 8 spaces for the first field

    for (i = 2; i <= NF; ++i) {
        wordlen = length($i);

        if (wordlen + linelen > 65) {
            # break output line since adding next word
            # would make it too long
            printf("\n\t");
            linelen = 8; # count tab as 8 spaces
        }

        if (i < NF) {
            printf("%s ", $i);
            linelen += wordlen + 1; # +1 for the space
        } else {
            printf("%s\n", $i);
        }
    }
}

テスト:

$ awk -f script.awk file.in
Depth   Description
(ft)    -
12370.0 LS: Mdst, blsh gry, sft, occ mod firm, crpxln, prly, arg,
        SLTST: blk, firm-mod hd, amor, gt, mod calc, CLST: lt
        gry-m gry, sft, amor, wxy
12400.0 LS: Mdst, blsh gry, mod firm, crpxln, chky, arg, SLTST:
        blk-dk gry, firm-mod hd, amor, gt, mod calc, CLST: lt
        gry-m gry, occ rdsh gry, mod firm, amor, wxy, tr CHK
12430.0 LS: Mdst, blsh gry, mod firm, crpxln, chky, arg, SLTST:
        blk-dk gry, firm-mod hd, amor, gt, mod calc, SH: blk-dk
        gry, mod firm, blky-plty, occ brit, wxy
12460.0 SH: blk-dk gry, mod firm, blky-plty, occ brit, ea, SLTST:
        blk-dk gry, firm-mod hd, amor, gt, mod calc, SST: gry-dk
        gry, wl consol, v f, ang, p srt, cotd, slily calc cmt, no
        fluor

唯一の欠点は、ほとんどの出力ラインに末尾の空白が残ることです。出力を渡してそれを削除できますsed 's/ $//'

おすすめ記事