주어진 값이 A 열에 있으면 B 열의 값을 바꿉니다.

주어진 값이 A 열에 있으면 B 열의 값을 바꿉니다.

다음 데이터가 주어지면:

aaa bbb aaa ccc aaa ddd
123 222 aaa aaa bbb ccc

열 4의 값이 "ccc"인 경우 sed 또는 awk를 사용하여 같은 줄에 있는 열 6의 값을 "end"라는 단어로 바꾸고 싶습니다.

어떤 아이디어라도 크게 감사하겠습니다.

답변1

그리고 awk:

awk '$4=="ccc"{ $6="end" }1' file

마지막은 1현재 줄만 인쇄하며 다음을 { print }참조하세요.awk 스크립트 끝에 있는 1은 무엇을 의미합니까?).

답변2

나는 표 형식 데이터에 대한 작업을 수행하기 위해 sed를 사용하는 것을 권장하지 않지만, 질문의 레이블이 주어지면 어쨌든 GNU sed 솔루션을 제공하겠습니다.

sed -r 's:^(([^ ]* ){3}ccc [^ ]* )[^ ]*(.*)$:\1end\3:' file

6개 이상의 열이 있을 수 있다고 가정합니다. 그렇지 않은 경우 (.*)그룹\3은 필요하지 않습니다.

보시다시피, 코드는 작성/수정 시 가독성이 낮고 오류가 발생하기 쉬우므로 awk 솔루션이 더 나은 선택입니다.

답변3

#!/usr/bin/python
k=open('filename','r')
for i in k:
    o=i.strip().split(' ')
    if ( o[3] == "ccc" ):
        o[5]="end"
    print " ".join(o)

산출

aaa bbb aaa ccc aaa end
123 222 aaa aaa bbb ccc

관련 정보