awk는 열을 대체하고 조건부 통계인 경우 인쇄합니다.

awk는 열을 대체하고 조건부 통계인 경우 인쇄합니다.

다음을 출력하는 파일이 있습니다

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)

관련 정보