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

관련 정보