여러 조건이 있는 파일 구문 분석

여러 조건이 있는 파일 구문 분석

파일을 구문 분석하는 스크립트를 만들고 싶습니다. 이것이 내가 해야 할 일입니다.

  1. 나는 단지 각 응용 프로그램의 첫 번째 행을 얻고 싶습니다. 1,3,4열만 확인하고 싶습니다. 애플리케이션의 인스턴스가 여러 개 있는 경우 첫 번째 인스턴스만 원합니다. 특급용. THSMOB11이 선택되지만 THSMOB12가 주석 처리됩니다. THSINT11이 THSINT12를 선택하여 댓글을 달았습니다.
  2. 사용하고 싶지 않은 다른 줄 앞에 "#"을 추가하고 싶습니다.

샘플 텍스트

애플리케이션 이름 채널 폴더 인스턴스
이 서비스 사업 이 이 bcr1 THSMOB11
본 서비스 사업은 Thisbin1 THSINT11
이 서비스 사업 이 bbr1 THSBRC11
이 서비스 사업 이 로봇 1 THSIVR11
이 서비스 사업은 adm1 THSWS11
이 서비스 사업 이 이 bcr1 THSMOB12
본 서비스 사업은 Thisbin1 THSINT12
이 서비스 사업 이 bbr1 THSBRC12
이 서비스 사업 이 bbr1 THSBRC13

이 코드로 시작합니다.

#!/bin/ksh

while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "Text read from file: $line"
done < "$1"

예상되는 결과;

이 서비스 사업 이 이 bcr1 THSMOB11
본 서비스 사업은 Thisbin1 THSINT11
이 서비스 사업 이 bbr1 THSBRC11
이 서비스 사업 이 로봇 1 THSIVR11
이 서비스 사업은 adm1 THSWS11
#ThisServicesBusiness ThisThisbcr1 THSMOB12
#ThisServicesBusiness ThisThisbin1 THSINT12
#ThisServicesBusiness ThisThisbbr1 THSBRC12
#ThisServicesBusiness ThisThisbbr1 THSBRC13

답변1

Awk이 경우에 더 적합합니다.

awk 'a[$1]++{ $0="#"$0 }1' file
  • a[$1]++{ $0="#"$0 }- 연관 배열은 a각각의 발생 횟수를 보유합니다."응용 프로그램 이름"(필드 1에서 발생 $1) 사용"응용 프로그램 이름"배열 키로. 두 번째 발생부터 전체 레코드는 char $0로 시작 됩니다.#

산출:

App1 Channel1 Name1 Folder1
#App1 Channel1 Name2 Folder1
App2 Channel1 Name1 Folder1
#App2 Channel1 Name1 Folder1
App3 Channel1 Name1 Folder1
App4 Channel1 Name1 Folder1
#App1 Channel2 Name1 Folder1
#App1 Channel3 Name1 Folder1
#App1 Channel1 Name1 Folder2

관련 정보