다른 필드의 값을 기반으로 한 필드의 값을 찾고 바꾸는 방법은 무엇입니까?

다른 필드의 값을 기반으로 한 필드의 값을 찾고 바꾸는 방법은 무엇입니까?

이런 파일이 있습니다.

IMS00|20140101|Unix|Jan14
IMS01|20140201|Unix|Feb14
IMS02|20140301|Unix|Mar14
IMS03|20140101|Unix|Jan14
IMS04|20140201|Unix|Feb14

내 기준은 열 1의 값이 이면 IMS00열 4의 값을 Jan14로 바꾸고, Jan15 열 1의 값이 이면 IMS01열 4의 값을 Feb14로 바꿔야 한다는 것입니다 Feb15.

이것이 어떻게 달성될 수 있습니까?

답변1

귀하의 질문은 매우 명확하지 않습니다. 예를 들어 귀하가 작성한 코드에서는 점으로 IMS00나중에 호출됩니다 . 또한 대신 IMS.00열 수를 변경하는 것도 가능해야 합니다 . 어쨌든, 당신은 찾고있을 것입니다43

awk 'BEGIN{FS=OFS="|"}$1=="IMS00"{$4="Jan15"}$1=="IMS01"{$4="Feb15"}1' file

BEGIN블록은 맨 처음에 한 번만 실행되며 필드 구분 기호 FS와 출력 필드 구분 기호를 OFS로 설정합니다 |. 결국 모든 것을 인쇄하게 됩니다 1.

답변2

Perl에서는 다음과 같이 할 수 있습니다.

perl -pe 's/^(IMS00\|.*\|).*/$1Jan15/; s/^(IMS01\|.*\|).*/$1Feb15/;' file

답변3

다음은 Python 솔루션입니다.

#!/usr/bin/env python2
with open('file.txt') as f:
    for line in f:
        if line.startswith('IMS00'):
            print line.replace('Jan14', 'Jan15')
        elif line.startswith('IMS01'):
            print line.replace('Feb14', 'Feb15')

스크립트는 파일의 각 줄을 읽은 다음 줄이 주어진 문자열로 시작하는지 확인합니다. 그렇다면 줄의 필요한 부분은 대체 문자열로 대체됩니다.

관련 정보