BashはテキストHHMMSSをHH:MM:SSに変換します。

BashはテキストHHMMSSをHH:MM:SSに変換します。

タイムスタンプ(最初の列)がHHMMSS形式のcsvログファイルを読み込んでいます。ここで、HHは時間(0-23)、MMは分(0-59)、SSは2番目(0-59)です。 。

ファイルを読み取り、列データに対してさまざまな変換を実行して、タイムスタンプが変数(CURRTYMEなど)に含まれるようにしました。私の現在の変換は次のとおりです

# Data will have leading zeros and will always be 6 characters
CURRTYME="073031"
NEXTTYME=`echo $CURRTYME | sed 's/./&:/2'`
LASTTYME=`echo $NEXTTYME| sed 's/./&:/5'`
echo $LASTTYME

これは挿入を実行する最良の方法ですか、それとも1つのsedステートメントで実行できますか?

答え1

#!/bin/bash

CURTIME="073031"

echo $CURTIME | sed "s|\(..\)\(..\)\(..\)|\1:\2:\3|"
echo $CURTIME | cut -c-2,3-4,5- --output-delimiter=:

echo ${CURTIME:0:2}:${CURTIME:2:2}:${CURTIME:4:2}

最後の項目は必須ですbash

それとも行くかもしれませんが、awkそんなに小さなことをするのはとても過度だと思います。

答え2

CSVファイルのタイトルが次のようになるとします。

time,data A,data B
123456,abba,baab
654321,quux,uxqu

...最初のフィールドは、次のようにtimeMiller()を使用して変換できます。NNNNNNNN:NN:NNmlr

$ mlr --csv put -S '$time = sub($time,"(..)(..)(..)","\1:\2:\3")' file
time,data A,data B
12:34:56,abba,baab
65:43:21,quux,uxqu

データをCSVに読み込み、置換コマンド(sub())を使用して、名前付きフィールドをtimeファイル内の各レコードに必要な形式に変換します。

置換は、timeフィールドの最初の6文字をそれぞれ2文字の3つのグループに一致させ、グループ間にコロンを挿入します。サブコマンド-Sのオプションはputフィールドタイプを推論しないため、これを数値ではなく文字列として扱うことができます。

オプションが与えられると、-Iファイルmlrは「その場で」編集されます。

関連情報