파이프로 구분된 파일이 있는데 |
6열에 7열의 문자가 포함되어 있고 6열에 7열의 문자가 포함되어 있으면 I
인쇄 하고 싶은데 어떻게 해야 할지 모르겠습니다!0758000
A
0800000
예:
원본 파일
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 열을 모두 제거하고 구분 기호가 있는 빈 공간을 모두 제거하고 싶습니다.