0

サーバーに接続し、データを .csv ファイルにエクスポートし、新しく作成されたファイルを使用する jar を実行する bash スクリプトを作成しています。問題は、jar がファイル名に .csv ファイルの最初の行の Timestamp 列の値を含める必要があることです。

これが私の .csv ファイルの最初の行です。この場合、タイムスタンプは行の末尾にある2012-11-01です。

"####<Nov 1, 2012 12:00:01 AM UTC> <Warning> <AesoRMQAdapter::RabbitMQAdapter> <> <myServer> <[ACTIVE] ExecuteThread: '7' for queue: 'weblogic.kernel.Default (self-tuning)'> <> <> <> <1351728001726> <BEA-000000> <DEBUG SEND MESSAGE={"Volume":55.1,"OfferedVolume":54.8,"ArmedVolume":0.0,"Status":false,"BlockNr":0,"Timestamp":"2012-11-01T00:00:01+0000"}> "

私の質問は次のとおりです。

.csv ファイルを取得した後、どうすれば...

  1. .csv ファイルの最初の行から最初のタイムスタンプを取得します
  2. .csv ファイルを保存するファイル名にそのタイムスタンプを使用します。

私はあなたのすべての助けに感謝します!

4

3 に答える 3

2

head -1入力ファイルから 1 行だけgrep -oを取得し、この行のすべてのタイムスタンプを取得して、最初の 1 つだけを保持するために使用しますhead -1

$ date=`cat myfile.csv | head -1 | grep -o -e "[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}" | head -1`
$ echo $date
2012-11-01
$ mv myfile.csv myfile.$date.csv
于 2012-11-13T13:24:01.290 に答える
0

たとえば、次の場合GNU grep:

ts=$(grep -Pom1 '(?<="Timestamp":")[^"]*' csv)

またはでsed

ts=$(sed -n '1s/.*"Timestamp":"\([^"]*\).*/\1/p' csv)

それからあなたはすることができます

mv csv "$ts.txt"

wherecsvは古い名前で、2012-11-01T00:00:01+0000.txtが新しい名前になります。

于 2012-11-13T13:21:58.457 に答える
0

awk oneliner でワンショットで実行:

awk -F':"' 'NR==1{split($NF,t,"T");print "mv "FILENAME" "t[1]".csv"}' file.csv

これにより、「mv」コマンドラインが出力されます。実行したい場合は、次のように出力を sh にパイプするだけです。

awk ..... |sh

テスト:

kent$  cat dummy.csv 
"####<Nov 1, 2012 12:00:01 AM UTC> <Warning> <AesoRMQAdapter::RabbitMQAdapter> <> <myServer> <[ACTIVE] ExecuteThread: '7' for queue: 'weblogic.kernel.Default (self-tuning)'> <> <> <> <1351728001726> <BEA-000000> <DEBUG SEND MESSAGE={"Volume":55.1,"OfferedVolume":54.8,"ArmedVolume":0.0,"Status":false,"BlockNr":0,"Timestamp":"2012-11-01T00:00:01+0000"}> "
foo;bar;blah

kent$  awk -F':"' 'NR==1{split($NF,t,"T");print "mv "FILENAME" "t[1]".csv"}' dummy.csv
mv dummy.csv 2012-11-01.csv
于 2012-11-13T13:25:38.703 に答える