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
xyz
3열 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
설정 합니다 . 첫 번째 행(분명히 열 헤더가 포함되어 있음)에서 대체가 발생하지 않는지 확인하세요.replacement
NR > 1