最初のフィールドに数字を含む行があります。
46066.874.89
48569.123.56
56489.256.88
654.12.32
84689.25.69
今やりたいことは、00
4行目の末尾に654
ファイルを追加し、1行目の前に3番目の数字を追加することです.
。どうすればいいですか?使ってみよう
sed 's/^[0-9][0-9][0-9]./&00/'
しかし、私が得た結果は
4606006.874.89
4856009.123.56
5648009.256.88
654.0012.32
8468009.25.69
答え1
ほぼすべて来ました:
$ sed -E 's/^([0-9][0-9][0-9])\./\100./' file
46066.874.89
48569.123.56
56489.256.88
65400.12.32
84689.25.69
答え2
コマンドsed
は3桁の数字の後に2つのゼロを挿入し、各行の先頭に別の文字を挿入します。 「すべての文字」と一致します.
。\.
実際のポイントと一致させるためにポイントをエスケープしましたが、ゼロが2つ挿入されます。後ろに指す。
少しだけ調整すると問題が解決します。
$ sed 's/^\([0-9]\{3\}\)\./\100./' file
46066.874.89
48569.123.56
56489.256.88
65400.12.32
84689.25.69
または、sed
拡張正規表現をサポートする場合(最近はほとんどサポート):
$ sed -E 's/^([0-9]{3})\./\100./' file
46066.874.89
48569.123.56
56489.256.88
65400.12.32
84689.25.69
より一般的に使用awk
してください。
$ awk -F . 'BEGIN { OFS=FS } length($1) < 5 { $1 = sprintf("%s%.*d", $1, 5 - length($1), 0) }; 1' file
46066.874.89
48569.123.56
56489.256.88
65400.12.32
84689.25.69
awk
長さが5文字未満の最初の点で区切られた列の各項目に対して、このコマンドは文字列の合計長が5文字になるように文字列を必要な数のゼロで埋めます。
これは、整数を欠けている長さのゼロで埋められた文字列にフォーマットすることによって0
行われます。次に、そのフィールドの既存のデータと結合します。
これは、最初のフィールドのすべての短い文字列(たった3つの文字を含む文字列ではない)に適用されます。
文字列の先頭をゼロで埋める方が簡単です(必須ではありませんが、許可されています)。
$ awk -F . 'BEGIN { OFS=FS } { $1 = sprintf("%.5d", $1) }; 1' file
46066.874.89
48569.123.56
56489.256.88
00654.12.32
84689.25.69
最初のフィールドに整数が含まれているという事実を活用し、それをsprintf()
正しい幅のゼロで埋められた整数にフォーマットします。
両方のコマンドの1
末尾にあるコマンドは、現在行を印刷するデフォルトのジョブを呼び出します({ print }
またはで置き換え可能{ print $0 }
)。