5열과 6열의 데이터를 비교하여 가장 작은 차이 요소를 출력합니다.

5열과 6열의 데이터를 비교하여 가장 작은 차이 요소를 출력합니다.

다음 데이터가 포함된 파일이 있습니다.

APPLE,FRUIT,1KG,RED,1660.00|1680.00|1700.00|1720.00|1740.00|1760.00|1800.00|1900.00|1920.00|1520.00|1320.00|1340.00|1360.00|1380.00|1400.00|1420.00|1440.00|1460.00|1480.00|1940.00|940.00|1880.00|1820.00|1840.00|1860.00|1780.00|1500.00|1020.00|1040.00|1060.00|1080.00|1100.00|1120.00|1140.00|1160.00|1180.00|1200.00|1220.00|1240.00|1260.00|1280.00|1300.00|960.00|980.00|1000.00|1540.00|1560.00|1580.00|1600.00|1620.00|1640.00,1429.100000
ORANGE,FRUIT,2KG,GREEN,1660.00|1680.00|1700.00|1720.00|1740.00|1760.00|1900.00|1920.00|1500.00|1320.00|1340.00|1360.00|1380.00|1400.00|1420.00|1440.00|1460.00|1940.00|1800.00|940.00|1880.00|1820.00|1840.00|1860.00|1780.00|1480.00|1020.00|1040.00|1060.00|1080.00|1100.00|1120.00|1140.00|1160.00|1180.00|1200.00|1220.00|1240.00|1260.00|1280.00|1300.00|960.00|980.00|1000.00|1520.00|1540.00|1560.00|1580.00|1600.00|1620.00|1640.00,1432.100000

열 5의 모든 값을 확인하고 싶습니다(열 5를 가져오는 구분 기호는 ","입니다). 열 6과 비교하여 차이가 가장 작은 요소를 새 파일에 넣습니다.

예상되는 출력은 다음과 같습니다.

APPLE,FRUIT,1KG,RED,1420.00
ORANGE,FRUIT,2KG,GREEN,1440.00

내 파일에는 200줄이 넘는데 동일한 작업을 수행하는 한 줄 명령을 찾고 있습니다.

답변1

AWK 솔루션이 필요한 경우 제공하겠습니다.

awk -F, 'NF>4{
        n=split($5,a,"|")
        l=a[0];
        for(i=1;i<n;i++)
                if((a[i]-$6)^2<(l-$6)^2)
                        l=a[i];
        print $1","$2","$3","$4","l                                                                                                                                                                                
}' input > output

답변2

이것이 내 Python 솔루션입니다.

with open('/path/to/file', 'r') as f:
    for line in f:
        x=line.split(',')
        y=x[4].split('|')
        print(','.join(x[:4]) + ',' + str(min(y, key=lambda z: abs(float(z)-float(x[5])))))

Pyed Piper(Pyed Piper라고도 함)와 같은 것이 있는 경우 pyp터미널 프롬프트에서 직접 실행할 수 있습니다.https://code.google.com/archive/p/pyp/

관련 정보