파일을 구문 분석하는 스크립트를 만들고 싶습니다. 이것이 내가 해야 할 일입니다.
- 나는 단지 각 응용 프로그램의 첫 번째 행을 얻고 싶습니다. 1,3,4열만 확인하고 싶습니다. 애플리케이션의 인스턴스가 여러 개 있는 경우 첫 번째 인스턴스만 원합니다. 특급용. THSMOB11이 선택되지만 THSMOB12가 주석 처리됩니다. THSINT11이 THSINT12를 선택하여 댓글을 달았습니다.
- 사용하고 싶지 않은 다른 줄 앞에 "#"을 추가하고 싶습니다.
샘플 텍스트
애플리케이션 이름 채널 폴더 인스턴스 이 서비스 사업 이 이 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