나는 Awk에 상당히 익숙하며 다음 쿼리를 가지고있다.Awk에서 여러 if 조건을 사용하는 방법?
I 출력 다음 날을 주어야한다 awk 명령 만들기 위해 노력하고
"11111","TRUE","aa"
"456789","TRUE","aa;bb;cc"
"2345","TRUE","bb"
"434566","","cc"
input.csv : 나는 것으로 처음 두 개의 인수를 필요
output.csv
"11111","TRUE","aa,,"
"456789","TRUE","aa,bb,cc"
"2345","TRUE",",bb,"
"434566","",",,cc"
을 매번 인쇄되지만 세 번째 것은 확인해야합니다. 따라서 세 번째 속성은 aa, bb, cc 또는 이들 중 aa, bb 또는 aa, cc 또는 aa, bb, cc 또는 이들 중 아무 것도 가질 수 있으므로이 중 어느 것이 있는지 확인하고 이러한 구분 된 속성을 인쇄해야합니다. 쉼표로 aa; bb가 입력 파일에 있다면 나는 aa, bb가 필요하다. 그 다음엔 아무 것도 없으면 ,,, (두 개의 쉼표)가 필요하다.
나는 각각 aa, bb, cc가있는 경우 각각의 정규식을 사용하고 있습니다. 존재하지 않는다면 varible 값에 추가되며, 쉼표 만 부가됩니다.
다음 명령을 생성했습니다.
awk 'BEGIN{FS=",";OFS=","} { if($3 ~ /aa/) { value="aa" } else { value="," }; if($3 ~ /bb/) { value="$value,bb" } else { value="$value," };
if($3 ~ /cc/) { value="$value,cc" } else { value="$value,"}; print $1 , $2 , $value}' input.csv > output.csv
하지만 다음과 같은 결과가 표시됩니다.
"11111","TRUE","11111","TRUE","aa"
"456789","TRUE","456789","TRUE","aa;bb;cc"
"2345","TRUE","2345","TRUE","bb"
"434566","","434566","","cc"
왜 처음 두 속성을 두 번 인쇄 한 다음 세 번째 값을 인쇄 할 지 모르겠습니다. 나는 쉘 스크립트에서 그것을 할 수 있지만 awk를 사용하여 그것을 할 필요가있다.
이 명령에 사용하는 논리는 무엇입니까? –
매번 인쇄 할 첫 번째 두 개의 인수가 필요하지만 세 번째 인수는 확인해야합니다. 그래서 세 번째 속성은 aa, bb, cc 또는 이들의 결합을 aa, bb 또는 aa, cc 또는 aa, bb, cc 또는 이들 중 어느 것도 가질 수 없으므로 이들 중 어느 것이 있는지 확인하고 이들을 인쇄해야합니다 쉼표로 쉼표로, 만약 aa; bb가 입력 파일에 있습니다. 나는 aa, bb가 필요합니다. 아무 것도 없으면, (두 개의 쉼표)가 필요합니다. 그래서 각 체크에 aa, bb, cc가있는 경우 각각의 정규 표현식을 사용하고 있습니다. 존재하지 않는 경우 varble 값에 추가됩니다 (쉼표). 값이 추가됩니다. –
'awk' 기본 안내서를 읽고'print $ n'이 변수'n'의 내용을 인쇄하지 않고 입력 행의 n 번째 필드를 인쇄하기 때문에'awk'에 대해 배우십시오. 따라서 'n'이 정수가 아닌 값 (예 : 영숫자 문자열)이면 정수 값 (예 : 0)으로 변환되고 '$ 0'(전체 입력 행)을 나타냅니다. – Jdamian