awk sed if ステートメント

awk sed if ステートメント

行の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。)

おすすめ記事