awk를 사용하여 n번째 열 검색 및 바꾸기

awk를 사용하여 n번째 열 검색 및 바꾸기

col3에서만 "xyz"를 검색하고 바꿀 수 있는 방법은 무엇입니까?

col1,col2,col3,col4  
abc,def,xyz,xyz  
xyz,abc,def,xyz

답변1

이 시도:

awk -F , '{ if ($3 == "xyz") $3="abc";}1' OFS=, test.csv

답변2

무엇으로 바꿀지 언급하지 않았으므로 그냥 ghi자리 표시자로 사용했습니다.

실제 텍스트인 경우 가장 쉬운 방법은 를 사용하는 것입니다 sed. 이렇게 하면 awk수정 사항만 표준 출력으로 전송되며 sed아래 설명과 같이 파일 자체를 변경할 수 있습니다.

sed '2s|xyz|ghi|1' file

설명하다:

2s replaces instances on the second line
xyz is what you want to replace
ghi is what it's being replaced with
1 replaces the first instance of it on the specified line

산출:

col1,col2,col3,col4
abc,def,ghi,xyz
xyz,abc,def,xyz

원하는 대로 작동한다고 확신하면 스위치를 사용하여 -i파일을 표준 출력으로 보내는 대신 파일 자체를 변경하세요.

sed -i '2s|xyz|ghi|1' file

다른 행과 열을 바꾸려면 위치와 인스턴스를 수정 2s하고 지정해야 합니다. 1물론 ghi원하는 대체품으로 교체할 수도 있습니다.

3열에 교체해야 할 다른 행이 있는 경우 스위치를 사용할 수 있습니다 xyz. e예를 들어:

col1,col2,col3,col4
abc,def,xyz,xyz
xyz,abc,def,xyz
abc,def,xyz,abc

xyz3열 4번째 행에도 나타납니다.

sed -e '2s|xyz|ghi|1' -e '4s|xyz|ghi|1' file

sed -i -e '2s|xyz|ghi|1' -e '4s|xyz|ghi|1' file

-e이는 네 번째 줄의 첫 번째 인스턴스를 대체하며 지정된 각 대체 스트림 에 사용됩니다 . 이 -i스위치는 파일을 표준 입력으로 보내는 대신 파일을 변경합니다.

답변3

awk -F ',' -v needle='xyz' -v replacement='foobar' 'BEGIN{ OFS = FS; } (NR > 1 && $3 == needle) { $3 = replacement; } 1' input.txt

필요에 따라 needle설정 합니다 . 첫 번째 행(분명히 열 헤더가 포함되어 있음)에서 대체가 발생하지 않는지 확인하세요.replacementNR > 1

관련 정보