특정 열 값(위치로 식별됨)을 파이프로 구분된 파일의 특정 행에 대한 다른 값으로 바꿔야 합니다.
샘플 파일:
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}
. - 이 명령은 수정된 파일을 표준 출력에 기록합니다. 먼저 실행하고 터미널로 출력하여 원하는 것이 맞는지 확인해야 합니다. 그런 다음 원하는 경우 명령을 실행하고 출력을 두 번째 파일로 출력한 다음 해당 파일을 입력 파일 위로 이동하거나 복사할 수 있습니다.
- 또는
-i
sed에 옵션을 추가하여 입력 파일을 덮어쓸 수도 있습니다.
전혀:
awk -F'|' -vOFS='|' 'NR==2 {$3 = "changed"} {print}' input
- 이 명령은 수정된 파일을 표준 출력에 기록합니다. 먼저 실행하고 터미널로 출력하여 원하는 것이 맞는지 확인해야 합니다. 그런 다음 원하는 경우 명령을 실행하고 출력을 두 번째 파일로 출력한 다음 해당 파일을 입력 파일 위로 이동하거나 복사할 수 있습니다.