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

여기에는 세 가지 방법이 있습니다.

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)

답변2

$ awk -F'"' '{print int($2)}' file
20200424090011
20200424120025
20200425120025

$ sed 's/"\([^.]*\).*/\1/' file
20200424090011
20200424120025
20200425120025

답변3

이는 다음에 의해 수행됩니다.

주문하다

awk -F "," '{print substr($1,1,15)substr($1,21,1)}' filename

sed 's/\..*/"/g' filename

python


#!/usr/bin/python
o=open('io.txt','r')
for  i in o:
    q=i.split(".")[0]
    print('{0}"'.format(q))

산출

"20200424090011"
"20200424120025"
"20200425120025"

관련 정보