파일의 특정 열에서 주어진 조건의 값을 바꾸는 방법

파일의 특정 열에서 주어진 조건의 값을 바꾸는 방법

파이프로 구분된 파일이 있는데 |6열에 7열의 문자가 포함되어 있고 6열에 7열의 문자가 포함되어 있으면 I인쇄 하고 싶은데 어떻게 해야 할지 모르겠습니다!0758000A0800000

예:

원본 파일

cat file1.txt
Z89|EEE333333|100001|JANMC84|19990101|I|1800040
Z89|EEE444444|200001|JANMC84|19990101|I|1800040
Z89|EEE222222|300001|JANMC84|19990101|A|1800040
Z89|EEE555555|700001|JANMC84|19990101|A|1800040

결과는 다음과 같습니다.

Z89|EEE333333|100001|JANMC84|19990101|I|0758000
Z89|EEE444444|200001|JANMC84|19990101|I|0758000
Z89|EEE222222|300001|JANMC84|19990101|A|0800000
Z89|EEE555555|700001|JANMC84|19990101|A|0800000

답변1

awk를 사용하여 이 작업을 수행할 수 있습니다.

awk -F\| 'BEGIN {OFS=FS} $6 == "A" {$7 = "0800000"} $6 == "I" {$7 = "0758000"}; 1' file1.txt

이는 필드를 분할한 다음 awk행을 다시 쓸 때 |출력 필드 구분 기호를 설정하는 것을 기반으로 합니다. |그런 다음 여섯 번째 필드인 경우 $6일곱 A번째 필드를 특정 값으로 바꾸거나 I인 경우 다른 값으로 바꿉니다. 그런 다음 변경 사항(만약 변경한 경우)을 포함하여 줄이 끝에 인쇄됩니다.

답변2

그리고 sed:

sed -e 's/\(I|\)[^|]*$/\10758000/;s/\(A|\)[^|]*$/\10800000/' file1.txt

요점은 or(즉, 마지막 열) s뒤의 모든 내용을 원하는 숫자로 바꾸는 것 입니다.I|A|

결과:

Z89|EEE333333|100001|JANMC84|19990101|I|0758000
Z89|EEE444444|200001|JANMC84|19990101|I|0758000
Z89|EEE222222|300001|JANMC84|19990101|A|0800000
Z89|EEE555555|700001|JANMC84|19990101|A|0800000

답변3

SLPJP_Box                                                        11/03/2017 22:00:07  -----                RU 13232789/1
 SLPJP_PRD_SOB_MAIN                                              09/07/2017 22:00:30  09/07/2017 22:00:57  OI 11769239/1 0
 SLPJP_PRD_SOD_BOX                                               11/03/2017 22:00:18  -----                RU 13232789/1
  SLPJP_PRD_SOD_001                                              11/03/2017 22:00:34  11/03/2017 23:10:25  SU 13232789/1 0
  SLPJP_PRD_SOD_002                                              11/03/2017 23:10:26  -----                RU 13232789/1
  SLPJP_PRD_SOD_003                                              -----                11/02/2017 22:18:34  AC 13232789/0
  SLPJP_PRD_SOD_004                                              -----                11/02/2017 22:19:55  AC 13232789/0

모든 열을 인쇄하고 싶지만 SU, OI, AC 열을 모두 제거하고 구분 기호가 있는 빈 공간을 모두 제거하고 싶습니다.

관련 정보