두 번째 열에 4단어 이하의 줄을 표시합니다.

두 번째 열에 4단어 이하의 줄을 표시합니다.

다음 형식의 기호 테이블이 있습니다.

M07UP49A0870I422.wav    <s> haraa keelaa <bn> </s>
M07UP49A0870I423.wav    <s> <horn> jau <babble>  </s>
M07UP49A0861C86105.wav  <s> waa khaada aadi kaa upayoga laabhadaayaka paaya gayaa hai  </s>
M07UP49A0861C86106.wav  <s> aadi kisaan apnee stara para bhii taiyaara kara sakatee hai </s>
M07UP49A0861C86107.wav  <s> kii gobara kaa upayoga kandxee banaakara iindhana kee ruupa mee kiyaa jaata hai <bang> </s>
M07UP49A0861C86108.wav  <s> geehuun kii phasala kii katxaayii kee baada <horn> kheeto ko aaga lagaakara saapha kiyaa jaata hai <babble> </s>
M07UP49A0861C86109.wav  <s> badxqii maatraa mee jiiwaanqu jalakara nashtxa ho jaataa hai <babble> </s>

분명히 파일에는 두 개의 열이 포함되어 있습니다. 첫 번째 열은 오디오 파일 이름(확장자 .wav)이고 두 번째 열은 오디오 파일의 녹음 내용입니다.

두 번째 열은 4단어 이하로 구성되어야 합니다(태그 제외, 태그는 <>로 작성된 단어임).

예를 들어 두 번째 행을 살펴보겠습니다. 이 줄에는 단 하나의 단어가 있습니다.집중하다(알아채다

<s> 
</s> 
<babble> 
<horn> 

태그이기 때문에 줄의 단어 수에 포함되지 않습니다.

기본적으로 모든 행에서 두 번째 열의 단어는 <>로 묶이지 않은 문자열입니다.

이제 내 임무는 두 번째 열에서 4단어 이하의 행만 찾는 것입니다.

나는 다음 명령을 사용했습니다.

gawk 'NF>4' file > output

그러나 결과를 얻지 못했습니다.

귀하의 편의를 위해 예상되는 결과는 다음과 같습니다.

M07UP49A0870I422.wav    <s> haraa keelaa <bn> </s>
M07UP49A0870I423.wav    <s> <horn> jau <babble>  </s>

두 번째 열에는 haraa와 keelaa라는 두 단어만 포함되어 있고 두 번째 행에는 jau라는 한 단어만 포함되어 있으므로 다음 출력이 표시됩니다.

이 행 외에도 두 번째 열의 행은 4개 이상의 단어로 구성됩니다.

답변1

다음 AWK 스크립트는 원래 줄을 x에 저장하고 모든 태그를 제거한 다음 단어 수를 계산합니다(첫 번째 필드의 파일 이름을 줄이려면 1을 뺍니다). 단어 수가 5보다 작으면 원래 줄을 인쇄합니다.

awk '{x=$0; gsub(/<[^>]*>/, "")} NF-1<5 {print x}' filename

답변2

할 수 있다이를 수행하려면 작은 Python 스크립트를 사용하십시오.

#!/usr/bin/env python3
import sys

for l in open(sys.argv[1]).readlines():
    l = l.strip()
    print(l) if len([s for s in l.split("<s>")[-1].split()
             if not all([s.startswith("<"), s.endswith(">")])]) <= 4 else ("")

다음을 설치 했다고 가정합니다 python3.

  • 빈 파일에 복사해서 다른 이름으로 저장하세요get_colls.py
  • 파일을 인수로 사용하여 실행하십시오.

    python3 /path/to/get_colls.py <file>
    

예제 출력:

M07UP49A0870I422.wav    <s> haraa keelaa <bn> </s>
M07UP49A0870I423.wav    <s> <horn> jau <babble>  </s>

설명하다

스크립트:

  • 구분 기호로 행 분할<s>
  • 두 번째 부분에서는 문자열 수를 세고,아니요로 시작 <하고 로 끝난다>
  • <=길이가 4인 줄을 출력하세요.

답변3

awk를 사용하세요아마도 여기가 가장 좋을 것입니다. 아이디어를 명확하게 표현할 수 있기 때문입니다(태그를 제거하면 첫 번째 열을 제외하고 최대 4개의 단어만 남습니다). 그러나 행 필터링만 하면 되고 필터는 정규식으로 설명할 수 있으므로 grep을 사용하여 이 작업을 수행할 수도 있습니다.

grep -vE '^ *[^ ]+((<[^>]*>| )+[^<> ]+){5}'
  • -v: 일치하는 행 제외
  • -E: 확장된 정규식 구문을 사용합니다.
  • ^ *[^ ]+줄 시작 부분의 첫 번째 단어와 일치합니다.
  • (…){5}괄호 안에는 5개 이상의 항목을 나타냅니다.
  • (<[^>]*>| )+비어 있지 않은 공백 및 탭 시퀀스와 일치합니다.
  • [^<> ]+태그가 아닌 단어 일치

답변4

다음 명령이 작동해야 합니다.

awk -F "wav" '{print $2}' file | awk '{gsub("<[^>]*>", "")}1' | awk 'NF<4'

관련 정보