awk를 사용하여 열에서 필드 구분 기호를 삭제하고 바꾸는 방법은 무엇입니까?

awk를 사용하여 열에서 필드 구분 기호를 삭제하고 바꾸는 방법은 무엇입니까?

다음과 같은 CSV 파일이 있습니다.

name_var;type_var;
id;string;
dt_depot;string;
num_artc;string

첫 번째 항목을 삭제 ;하고 마지막 항목을 대체하여 , 출력이 다음과 같도록 하고 싶습니다.

name_var type_var,
id string,
dt_depot string,
num_artc string

답변1

간단히 sed대체하면 다음과 같습니다.

$ sed 's/;$/,/; s/;/ /g' file
name_var type_var,
id string,
dt_depot string,
num_artc string

해결책 에 관해서는 awk입력 파일에 채워진 열이 2개만 포함되어야 하는 경우 다음 표현식을 사용할 수 있습니다 awk.

$ awk -F";" '{ if (NF==3) $2=$2","; print $1,$2 }' file
name_var type_var,
id string,
dt_depot string,
num_artc string

답변2

$ awk -F';' '{sub(/;$/,","); $1=$1} 1' file
name_var type_var,
id string,
dt_depot string,
num_artc string

스크립트는 ;줄 끝의 모든 항목을 변경한 다음 모든 입력 필드 구분 기호( 에서 설정 )가 출력 필드 구분 기호(기본적으로 공백)로 변경되도록 하는 필드 에 값을 할당하여 ,나머지 모든 항목을 로 변환합니다 . 그런 다음 기본 작업( )을 호출하는 참 조건(1)을 지정하여 현재 줄을 인쇄합니다 .;,;-F';'print $0

답변3

다음 과 awk같은 작업을 수행할 수 있습니다.

awk -F\; '{print $1" "$2","}'

마지막 쉼표가 마음에 들지 않으면 다음과 같이 다시 작성할 수 있습니다.

 awk -F\; '{ if (NF != 2) print $1" "$2","; else  print $1" "$2;}'

답변4

이 명령을 사용하면:

awk '{sub(/;$/,",")sub(/;/," ")}1' file

다음과 같은 결과가 나타납니다.

name_var type_var,
id string,
dt_depot string,
num_artc string

관련 정보