다음과 같은 파일이 있습니다 test.txt
.
000092;;;;2004;;;;N;;;;N
000098;;;;0086;;;;Y;;;;Y
세 번째 열의 값을 기준으로 네 번째 열의 값을 업데이트하고 싶습니다. 4열의 값이 이면 N
3열의 값을 로 바꾸고 NA
, 4열의 값이 이면 Y
3열의 값을 로 바꿉니다 UPDATE
.
출력은 다음과 같아야 합니다.
000092;;;;2004;;;;NA;;;;N
000098;;;;0086;;;;UPDATE;;;;Y
답변1
awk -F ';;;;' -v 'OFS=;;;;' '$4 == "Y" { $3 = "UPDATE" } $4 == "N" { $3 = "NA" } { print; }' test.txt
test.txt
질문 인쇄에 지정된 대로
000092;;;;2004;;;;NA;;;;N
000098;;;;0086;;;;UPDATE;;;;Y
;;;;
질문에 언급된 대로 실제로는 (단일 세미콜론)로 구분된 13개의 열 대신 (4개의 세미콜론)으로 구분된 4개의 열만 있다고 가정합니다 ;
. 따라서 4개 그룹 사이에 추가 데이터가 포함된 행이 있는 경우 이 스크립트는 작동하지 않습니다 ;
.
설명하다:
-F ';;;;'
입력 필드 구분 기호 설정
-v 'OFS=;;;;'
출력 필드 구분 기호 설정
$4 == "Y"
조건: 필드 4인 경우 예 Y
{ $3 = "UPDATE" }
조치: 필드 3 수정
무조건 조치와 동일: (결과) 행 인쇄N
NA
{ print; }
답변2
awk를 사용하여 먼저 입력 n 출력 필드 구분 기호를 설정한 다음 입력 데이터에서 y 또는 n만 포함된 레코드를 찾은 다음 변경하고 마지막으로 stdout으로 인쇄합니다.
$ awk -F';;;;' '
BEGIN{OFS=FS}
$4 ~ /^[NY]$/{$3 = ($4 == "N") ? "NA" : "UPDATE"}1
' file
또 다른 접근 방식은 다음과 같습니다.
$ awk -F';;;;' 'BEGIN{OFS=FS;a["N"]="NA";a["Y"]="UPDATE"}
$4 ~ /^[NY]$/{$3 = a[$4]}1' file