행을 두 개의 열과 두 개의 열로 인쇄

행을 두 개의 열과 두 개의 열로 인쇄

이런 종류의 파일이 있는데 마지막 두 열만 가져와 한 줄에 두 개씩 인쇄하는 방법을 찾고 있습니다. 누군가 나에게 아이디어를 줄 수 있습니까? 참가해주셔서 감사합니다:

  1     0.00     435.9     6.04
  2     6.04     691.7    27.61
  3    33.65     964.5    10.03
  4    43.68    1932.5

산출

435.9 6.04     691.7 27.61     964.5 10.03    1932.5

답변1

이와 같이?

awk '{printf ("%s %s\t", $3, $4)}' file

아니면 이와 같이 누락된 필드를 처리할 수도 있습니다.

awk '{field3=$3; field4=$4} $3==""{field3="\t"} $4==""{field4="\t"} {printf ("%s %s\t", field3, field4)}' file

답변2

파이프를 사용하여 세 번째와 네 번째 필드를 공백으로 구분하여 인쇄한 다음 awk-paste각 쌍을 기본 구분 기호로 구분하여 한 줄에 모두 표시하는 옵션을 전달합니다.paste-spasteTAB=\t

$ awk '{print $3, $4}' file | paste -s -

에 머물고 싶다면 awk다음과 같이 하는 것도 가능합니다.

$ awk '
    BEGIN { s[1] = "\t"; ORS = "" }
    { print s[(NR>1)] $3, $4 }
    END { print RS }
' file

몇 가지 작업을 수행할 수도 있지만 cut-paste그 전에 작은 편집을 해야 합니다. 즉, 모든 공백을 공백으로 변환하고, 여러 공백을 압축하고, 선행 공백이 있는 경우 제거해야 합니다. 이는 cut구분 기호로 단일 문자가 필요하고 cut이 선행 구분 기호를 무시하지 않기 때문입니다.

$ < file sed -Ee 's/\s+/ /g;s/^ //' |
    cut -d' ' -f3,4 | paste -s -

답변3

파이썬

#!/usr/bin/python
import re
m=re.compile(r'\s{1,}')
t=[]
k=open('file.txt','r')
for i in k:
    j=re.sub(m," ",i)
    try:
        o=j.strip().split(' ')
        if (len(o) == 4):
            y="{0} {1}".format(o[2],o[3])
        elif (len(o) == 3):
            y="{0}".format(o[2])
        else:
            print "Number of columns is less than 3"
        t.append(y)

    except:
        pass

print "\t".join(t)

산출

 python test.py 
435.9 6.04  691.7 27.61 964.5 10.03 1932.5
praveen@praveen:~

$

awk 명령

awk '{print $3,$4}' filename| perl -pne "s/\n/\t/g"

435.9 6.04 691.7 27.61 964.5 10.03 1932.5

관련 정보