0

私は、さまざまな方法で時間を入力し、特定の形式で出力する sed と cut を使用して bash スクリプトに取り組んでいます。以下に行の例を示します。

timeinhour=$(cut -d" " -f2<<<"$line" | sed 's/p/ /'  | sed 's/a/ /' | sed 's/am/ /' | sed 's/pm/ /' | sed 's/AM/ /' | sed 's/PM/ /' )

ご覧のとおり、さまざまな方法でフォーマットされている可能性のある時間エントリから末尾の午前または午後を削除して、数字だけを残しています。

したがって、この行は 1 日の時間 (timeinhour) を吐き出したいだけです。つまり、"10a" や "10am" と同様に、"1000AM" = "10" とします。

私が直面している問題は、時間エントリの長さが異なることです。最後の2文字を削除するようにsedまたはcutに指示すると、「1000」は必要な時間を「10」として正しく出力しますが、すでに「10」になっている時間に使用すると、明らかに空白の出力になります。

私はこのような行で実験してきました

sed 's/\(.*\)../\1/'

誰かアドバイスがあれば、よろしくお願いします。

たとえば、この入力:

1p
1032AM
419pm
1202a

生成されます:

1
10
4
12
4

2 に答える 2

2
sed 's/[^0-9]//g;s/^[0-9]\{1,2\}$/&00/;s/^\(.*\)..$/\1/'

ステップ

1p    -> 1    ->  100 -> 1
10a   -> 10   -> 1000 -> 10
419pm -> 419  ->  419 -> 4
1202a -> 1202 -> 1202 -> 12
  • 数字ではないものを削除する
  • 1 桁または 2 桁 (時間) を 4 桁 HHmm に拡張します
  • 最後の 2 文字 (分) を無視する
于 2011-05-14T17:49:31.933 に答える
0

試す:

timeinhour=$(cut -d" " -f2<<<"$line" | sed 's/p/ /;s/a/ /;s/am/ /;s/pm/ /;s/AM/ /;s/PM/ /' | sed 's/\(.*\)../\1/' # Using your example.
于 2011-05-14T17:43:09.883 に答える