다음 데이터가 주어지면:
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