파이프로 구분된 파일에서 특정 줄의 특정 열에 있는 값을 바꾸세요 - sed 또는 awk?

파이프로 구분된 파일에서 특정 줄의 특정 열에 있는 값을 바꾸세요 - sed 또는 awk?

특정 열 값(위치로 식별됨)을 파이프로 구분된 파일의 특정 행에 대한 다른 값으로 바꿔야 합니다.

샘플 파일:

a|abc|val|sum|temp
bs|run|win|can|done
jump|over|change|value

이제 3열, 2행의 값을 "변경됨"으로 바꾸고 싶습니다. (위의 입력 예에서 교체될 이전 값은 "win"이지만 무엇이든 될 수 있으며 그것이 무엇인지 미리 알 수 없습니다.)

예상 출력:

a|abc|val|sum|온도
넌센스|실행|변경됨|할 수 있다|완료
점프|십자가|변경|값

답변1

GNU sed에서는

sed -E '2s/^(([^|]*\|){2})[^|]*/\1changed/' input
  • 첫 번째 "2"( 2s)는 줄 번호를 나타냅니다.
  • 두 번째 "2"( {2})는 건너뛰고 동일한 열을 유지할 열 수를 식별합니다. 17번째 필드를 변경하려면 를 사용할 수 있습니다  {16}.
  • 이 명령은 수정된 파일을 표준 출력에 기록합니다. 먼저 실행하고 터미널로 출력하여 원하는 것이 맞는지 확인해야 합니다. 그런 다음 원하는 경우 명령을 실행하고 출력을 두 번째 파일로 출력한 다음 해당 파일을 입력 파일 위로 이동하거나 복사할 수 있습니다.
  • 또는 -ised에 옵션을 추가하여 입력 파일을 덮어쓸 수도 있습니다.

전혀:

awk -F'|' -vOFS='|' 'NR==2 {$3 = "changed"} {print}' input
  • 이 명령은 수정된 파일을 표준 출력에 기록합니다. 먼저 실행하고 터미널로 출력하여 원하는 것이 맞는지 확인해야 합니다. 그런 다음 원하는 경우 명령을 실행하고 출력을 두 번째 파일로 출력한 다음 해당 파일을 입력 파일 위로 이동하거나 복사할 수 있습니다.

관련 정보