awk/sed: タイムスタンプから最後の 5 文字を正しく削除できません。

awk/sed: タイムスタンプから最後の 5 文字を正しく削除できません。

barcforex.txt3行のテストファイルがあります。

"20200424090011.047Z","New","0232917586","USD",8393000000.0000,"EUR"
"20200424120025.308Z","New","0132910586","INR",8393000000.0000,"USD"
"20200425120025.027Z","New","0132910587","USD",110000000.0000,"INR"

.最初のフィールド(タイムスタンプ)を抽出し、最後の5文字(〜Z)を切り取り、出力を次のように表示したいと思います。

"20200424090011"
"20200424120025"
"20200425120025"

私の試みはほぼ成功しました。

awk -F',' '{ print $1 }' barcforex.txt |  sed 's/.[0-9]Z//g' 

これは私に次のような結果を与えます:

"20200424090011.0"
"20200424120025.3"
"20200425120025.0"

次のような他の試み:

awk -F',' '{ print $1 }' barcforex.txt |  sed 's/^.[0-9]+Z$//g'

これ:

awk -F',' '{ print $1 }' barcforex.txt |  sed 's/^.[0-9]{3}Z$//g'

同じ出力を提供しました。

"20200424090011.047Z"
"20200424120025.308Z"
"20200424120025.308Z"

タイムスタンプから最後の5文字を​​正しく削除する方法は?

ベストアンサー1

これには3つの方法があります。

awk '{print substr($1,2,14)}' barcforex.txt   # Print 14 characters of string from position 2

awk -F'[".]' '{print $2}' barcforex.txt       # Split line at double quotes and dots; print 2nd field

grep -Po '(?<=^").*?(?=\.)' barcforex.txt     # RE to match between first " and first .

一般的に言えばawkおそらく不要sed(またはgrep

おすすめ記事