行の2番目の文字に「.」がある場合は、最初に0を追加しようとします。私はそれらを組み合わせることができませんでした。
awk '{ print substr( $0, 2, 1 ) }' file.txt
2番目の文字を表示
sed -ie "s/.\{0\}/0/" file.txt
最初にゼロを追加してください。
「2番目の文字がドットの場合」が必要です。
サンプルファイル:
1.02.2017 23:40:00
10.02.2017 23:40:00
決定的な:
01.02.2017 23:40:00
10.02.2017 23:40:00
ベストアンサー1
私たちは問題を完全に解決するために、またはsed
いずれかを使用することができます。awk
そしてsed
:
$ sed 's/^.\./0&/' file.txt
&
置換コマンド()の置換部分にある場合、s
コマンドのパターン部分と一致する入力行部分まで拡張されます。
正規表現^.\.
は「^
()で始まり、文字(.
)の後にリテラルポイント(\.
)が続くすべての行と一致します。」。
行がある場合、1.02.2017 23:40:00
パターンは一致し、1.
行の先頭で置き換えられます。01.
そしてawk
:
awk
質問のコード部分に基づいて...
上記のように、各行に入力された2番目の文字が印刷されます。
$ awk '{ print substr($0, 2, 1) }' file.txt
2 番目の文字が返されるという事実をsubstr($0, 2, 1)
条件として使用できます。
$ awk 'substr($0, 2, 1) == "." { ... }' file.txt
前の条件がtrueの場合は、現在行の内容の前に0を追加するコードを入力してください{ ... }
。$0
$ awk 'substr($0, 2, 1) == "." { $0 = "0" $0 }' file.txt
その後、すべての行が印刷されていることを確認してください。
$ awk 'substr($0, 2, 1) == "." { $0 = "0" $0 } { print }' file.txt
もちろん、条件をsubstr($0, 2, 1) == "."
正規表現に変更することもできます(sed
ソリューションで使用したものとまったく同じものを使用します)。
$ awk '/^.\./ { $0 = "0" $0 } { print }' file.txt
「短いほど良い」と思っている人の中には、次のように書いています。
$ awk '/^.\./ { $0 = "0" $0 } 1' file.txt
(そしておそらくほとんどのスペースも削除されたでしょうawk '/^.\./{$0="0"$0}1' file.txt
。)