
표 1.csv
DATE, TIMESTAMP, ID, START TIME, END TIME, DURATION
2019-04-05, 13:57:19, 1607,13:06:42, 13:07:12, 00:00:30
2019-04-05, 13:58:00, 2327,13:57:26, 13:57:43, 00:00:17
2019-04-24, 12:30:00, 1836,11:20:01, 12:30:00, 01:09:59
2019-04-24, 12:30:00, 1836,11:20:01, 12:30:00, 01:09:59
2019-04-24, 15:30:01, 1836,14:50:01, 15:30:01, 00:40:00
2019-04-24, 15:30:01, 1836,14:50:01, 15:30:01, 00:40:00
표 2.csv
KEY, ID, NAME
407, 1607, RECORD1
1127,2327, RECORD2
636, 1836, RECORD3
664, 1864, RECORD4
703, 1903, RECORD5
다음과 같이 TABLE1.csv의 열 3과 TABLE2.csv의 열 2를 원하는 출력과 일치시킵니다.
DATE, TIMESTAMP, ID, NAME, START TIME, END TIME, DURATION
2019-04-05, 13:57:19, 1607, RECORD1, 13:06:42, 13:07:12, 00:00:30
2019-04-05, 13:58:00, 2327, RECORD2, 13:57:26, 13:57:43, 00:00:17
2019-04-24, 12:30:00, 1836, RECORD3, 11:20:01, 12:30:00, 01:09:59
2019-04-24, 12:30:00, 1836, RECORD3, 11:20:01, 12:30:00, 01:09:59
2019-04-24, 15:30:01, 1836, RECORD3, 14:50:01, 15:30:01, 00:40:00
2019-04-24, 15:30:01, 1836, RECORD3, 14:50:01, 15:30:01, 00:40:00
나는 모든 예를 시도했다
awk -F',' 'FNR==NR.....
답변1
이 sed
컬렉션은 공간의 대체를 보존 TABLE2.csv
한 다음 열을 추가합니다.
sed 's/^[^,]*, *\([0-9]*,[^,]*\)$/\1/
T2
H;d
:2
G
s/\([^,]*,[^,]*, *\)\([0-9]*,\)\([^[:cntrl:]]*\)\n.*\n\2\([^[:cntrl:]]*\)/\1\2\4, \3/
P;d' TABLE2.csv TABLE1.csv
필요한 경우 변경된 제목에 일부 내용을 추가해야 합니다.
s/^[^,]*, *\([0-9]*,[^,]*\)$/\1/
TABLE2.csv
행에서 두 번째와 세 번째 열을 추출합니다.T2
:2
대체가 이루어지지 않으면 다음으로 점프합니다(따라서TABLE2.csv
행의 경우).- 변경된
TABLE2.csv
행은 이전 공간에 추가된H
후d
삭제됩니다(행 실행 중지). :2
점프마크입니다. 아래의 모든TABLE1.csv
작업은 라인에 대해서만 수행됩니다.G
예약된 공간에서 패턴 공간으로 조회 테이블을 추가합니다.s/\([^,]*,[^,]*, *\)\([0-9]*,\)\([^[:cntrl:]]*\)\n.*\n\2\([^[:cntrl:]]*\)/\1\2\4, \3/
조회 테이블에서 ID( ) 항목을 찾아[0-9]*,
일치하는 필드를 추가합니다.P
추가된 조회 테이블 없이 이 줄을 인쇄하고d
이 줄의 실행을 중지합니다.
자세한 설명은 참고해주세요한 파일에 정의된 콘텐츠를 다른 파일로 바꾸는 방법
답변2
나는 사용할 것이다앗이를 위해
awk -F', *' -v OFS=', ' '
NR == FNR { name[$2] = $3; next }
{ $3 = $3 OFS name[$3]; print }
' TABLE{2,1}.csv
산출
DATE, TIMESTAMP, ID, NAME, START TIME, END TIME, DURATION
2019-04-05, 13:57:19, 1607, RECORD1, 13:06:42, 13:07:12, 00:00:30
2019-04-05, 13:58:00, 2327, RECORD2, 13:57:26, 13:57:43, 00:00:17
2019-04-24, 12:30:00, 1836, RECORD3, 11:20:01, 12:30:00, 01:09:59
2019-04-24, 12:30:00, 1836, RECORD3, 11:20:01, 12:30:00, 01:09:59
2019-04-24, 15:30:01, 1836, RECORD3, 14:50:01, 15:30:01, 00:40:00
2019-04-24, 15:30:01, 1836, RECORD3, 14:50:01, 15:30:01, 00:40:00
먼저 TABLE2를 읽고 ID를 NAME에 매핑합니다.
그런 다음 TABLE1을 읽고 ID 필드에 NAME을 추가합니다.
열 간격의 형식을 지정하는 것은 사용자의 몫입니다.