다른 열의 데이터를 기반으로 열 조작을 위한 awk/sed 필터의 예

다른 열의 데이터를 기반으로 열 조작을 위한 awk/sed 필터의 예

열 2와 5의 데이터가 "null"과 같지 않은 경우 sed 또는 awk를 효율적으로 사용하여 특정 열(예: 열 1)의 csv 데이터를 조작하는 방법에 대한 예를 찾으려고 합니다.

필터링되지 않은 예:

채워지지 않음,비어 있음,데이터,데이터,비어 있음,데이터
무인도,데이터,데이터,데이터,데이터,데이터
무인도,데이터,데이터,데이터,비어 있음,데이터
채워지지 않음,비어 있음,데이터,데이터,비어 있음,데이터
채워지지 않음, 비어 있음, 데이터, 데이터,데이터,데이터

될 것입니다:

채워지지 않음,비어 있음,데이터,데이터,비어 있음,데이터
인구가 밀집된,데이터,데이터,데이터,데이터,데이터
무인도,데이터,데이터,데이터,비어 있음,데이터
채워지지 않음,비어 있음,데이터,데이터,비어 있음,데이터
채워지지 않음, 비어 있음, 데이터, 데이터,데이터,데이터
도움을 주셔서 미리 감사드립니다!

답변1

awk 'BEGIN{ FS=OFS="," }
$2!="NULL" && $5!="NULL"{$1="POPULATED"}1' infile.csv

FS는 입력입니다.에프생산하다에스구분 기호 및 OFS산소산출에프생산하다에스구분 기호, 둘 다 쉼표 문자로 설정합니다.시작입력 파일을 처리하기 전에 NING을 수행합니다.

우리는 이 두 열(column#2 $2및column#5 $5)이유효하지 않은값) !="NULL"첫 번째 열 값을 업데이트한 $1="POPULATED"다음관용구1마지막으로 모든 변경 사항이 적용된 입력 행이 출력됩니다.

빈 열에 대해 NULL을 의미하는 경우 다음과 같이 빈 문자열과 비교하세요.

awk 'BEGIN{ FS=OFS="," }
$2!="" && $5!=""{$1="POPULATED"}1' infile.csv

답변2

#!/usr/bin/python
k=open('filepath','r')
for i in k:
    gsplit=i.strip().split(',')
    if (gsplit[1] != "NULL"  and gsplit[4] !="NULL"):
        jk="POPULATED"
        print jk+","+",".join(gsplit[1:])
    else:
        print i.strip()

산출

UNPOPULATED,NULL,DATA,DATA,NULL,DATA
POPULATED,DATA,DATA,DATA,DATA,DATA
UNPOPULATED,NULL,DATA,DATA,NULL,DATA
UNPOPULATED,NULL,DATA,DATA,NULL,DATA
POPULATED,DATA,DATA,DATA,DATA,DATA

관련 정보