sed を使用した文字列の書式設定

sed を使用した文字列の書式設定

sedを使用して次の入力文字列を出力文字列にフォーマットするにはどうすればよいですか?

中央の文字列は20番目の文字で始まり、最後の文字列は40番目の文字で始まる必要があります。

入力する:

begining center end     
beg12  cen12  end12
beg13 cen  end

出力:

begining     center      end     
beg12        cen12       end12
beg13        cen         end

答え1

awkその機能を使用してこのデータをフォーマットすることができますprintf()

$ awk '{ printf("%-20s%-20s%s\n", $1, $2, $3) }' data.in
begining            center              end
beg12               cen12               end12
beg13               cen                 end

これは、ファイルのデータがスペースで区切られていると仮定します。

列の幅をパラメータとして指定します。

$ cols=40
$ awk -v c="$cols" 'BEGIN { fmt=sprintf("%%-%ds%%-%ds%%s\n", c, c) } { printf(fmt, $1, $2, $3) }' data.in
begining                                center                                  end
beg12                                   cen12                                   end12
beg13                                   cen                                     end

答え2

これはsed私が使用しない場合の一つです。printf具体的には、「フィールド」が最小文字数
%-Nsを占めるまで文字列を空白で埋める形式を使用します。N

#!/usr/bin/env bash

while read first second third
do
    printf "%-20s%-20s%s\n" "$first" "$second" "$third"
done <<- 'EOF' 
    begining center end     
    beg12  cen12  end12
    beg13 cen  end
EOF

答え3

アッ方法:

awk '{printf("%-20s%-20s%-20s\n",$1,$2,$3)}' file

出力:

begining            center              end                 
beg12               cen12               end12               
beg13               cen                 end 

答え4

< yourfile tr -s '\t ' '\t\t' | expand -t 19,39

結果

         1         2         3         4         5
12345678901234567890123456789012345678901234567890
begining           center              end
beg12              cen12               end12
beg13              cen                 end

布材

  • まず、残りのスペースおよび/またはタブ文字をタブ文字に圧縮します。
  • 次に、オプションを使用してタブの場所を一覧表示してexpand結果にコマンドを適用します。-t

関連情報