2

私はbashを初めて使用し、次のようなファイルを持っています:

2012-11-22 11:36:55,909 1353551815756 1353551815909 0 true myapi 10 203051 203051:ShopDb:ShopDb
2012-11-22 11:37:00,292 1353551820146 1353551820292 0 true myapi 10 201897 201897:ShopDb:ShopDb
2012-11-22 11:38:01,824 1353551881672 1353551881824 0 true myapi 10 203051 203051:ShopDb:ShopDb

ループ内で、日付部分(2012-11-22 11:36:55)を抽出し、タイムスタンプに変換して変数に割り当てます(または単にdis bashでこれを実現する方法は?

4

5 に答える 5

3

その方法の 1 つとして、date コマンドを使用することもできます。

while IFS=, read x y; do
    date --date "$x" +%s
done < file.txt

+%s必要に応じてタイムスタンプに変換します。

于 2012-11-22T05:14:09.020 に答える
2
$ while IFS=" ," read f1 f2 f3
> do
>  echo $f1 $f2
> done < file
2012-11-22 11:36:55
2012-11-22 11:37:00
2012-11-22 11:38:01

IFS をスペースとコンマに設定すると、while ループで最初の 2 つのフィールドを簡単に抽出できます。

于 2012-11-22T02:48:18.770 に答える
2

GNU awkタイムスタンプを取得し、bash 配列を使用してそれらをキャプチャするために使用できます。

array=($(awk -F, '{ print mktime(gensub(/[:-]/," ","g",$1))}' file.txt))

次に、それらを反復処理できます。

for i in "${array[@]}"; do echo "$i"; done

結果:

1353548215
1353548220
1353548281

または、印刷するものを選択するだけです。たとえば、2 番目の要素をエコーするには、次のようにします。

echo "${array[1]}"

結果:

1353548220
于 2012-11-22T03:07:04.990 に答える
1

cut次のコマンドを使用します。

cut -c1-19 file

これにより、各行から1から19までの文字が抽出されます。

最初の行を取得するには:

head -n 1 file | cut -c1-19

そしてそれをbash変数に割り当てるには:

myTime=$(head -n 1 file | cut -c1-19)
于 2012-11-22T02:52:13.130 に答える
1

以下はあなたのために日付を抽出します:

awk 'BEGIN{FS="[ ,]"; OFS=" ";} {print $1, $2}' input_file
于 2012-11-22T02:49:49.337 に答える