다음을 출력하는 파일이 있습니다
Sending showtrans string ...
Oldest redo log files necessary to restart Extract are:
Redo Thread 1, Redo Log Sequence Number 29334, SCN 3364.4078507030 (14452348490774), RBA 673593872
Redo Thread 2, Redo Log Sequence Number 12371, SCN 3365.484854852 (14453049805892), RBA 3443216
XID Items Extract Redo Thread Start Time SCN Redo Seq Redo RBA Status
-----------------------------------------------------------------------------------------------------------------------------------------------
75.2.549177 0 sting1 1 2015-12-23:07:26:47 3364.4078507030 (14452348490774) 29334 673593872 Running
126.6.3078970 sting2 1 2015-12-24:00:22:11 3365.308496723 (14452873447763) 29364 6462055952 Running
출력은 다음과 같아야 합니다.
75.2 sting1
126.6 sting2
답변1
이것은 작동합니다:
awk '{split($1,a,".");if(a[1]!="") if(a[1]+0==a[1]){printf "%d.%d %s\n", a[1], a[2], ($2+0==$2)?$3:$2}}' input.txt
그러면 두 번째 열이 누락되었는지 확인하여 적절한 열을 가져옵니다.
답변2
여러 공백을 필드 구분 기호로 처리하고 단일 공백을 데이터의 일부로 처리할 수 있습니다.
awk -F' +|[.]' '$1~"^[0-9]+"{print $1"."$2,$4}' file
산출:
75.2 sting1
126.6 sting2
답변3
그렇지 않다는 걸 알지만 awk
이미 답을 알고 계시 awk
므로 다른 접근 방식을 제안하겠습니다.
나는 이것을 할 수 있습니다 :
perl -lne 'print "$1 $2" if m/^(\d+\.\d+)[^a-z]*(\w+)/' long_trans.txt
패턴 일치를 적용하고, 일치하면 캡처한 내용을 인쇄합니다.
^ # start of line
(\d+\.\d+) # digits seperated by a literal . (capturing)
[^a-z] # anything that isn't [a-z]
(\w+) # word characters (alphanumerics mostly) (capturing)