txt 파일에서 검색하고 각 결과를 새 파일에서 검색

txt 파일에서 검색하고 각 결과를 새 파일에서 검색

맥락상 후속 조치는 다음과 같습니다.txt 파일에서 검색한 다음 새 txt 파일로 인쇄하세요.몇 가지 추가적인 합병증이 있습니다.

2개의 txt 파일이 있습니다. 첫 번째 파일은 data.txt 파일로, 2000줄이 넘는 줄이 포함되어 있으며 그 안에 있는 데이터는 다음과 같습니다.

alpha
hmld 573
otndgd 29
fidnt 1962

beta
jdkrshm 2
adny 14
urmekhjf 6893
...

두 번째 파일은 value.txt입니다.

value.txt의 값 목록 중 하나가 포함된 모든 줄을 검색하고 (새 txt 파일에서) 인쇄하고 싶습니다.

dn
hm
sf

, result1.txt와 동일(헤더는 "alpha"와 유사함):

fidnt 1962 alpha
adny 14 beta

result2.txt와 유사:

hmld 573 alpha
jdkrshm 2 beta

내 시스템: 우분투

감사합니다

답변1

다시 한 번 말씀드리지만, awk여러분의 친구들은 여기 있습니다:

awk '
  !values_processed {
    result[$0] = "result"FNR".txt"; next
  }
  !NF {FNR=0; next}
  FNR==1 {header=$0; next}
  {
    for (value in result)
      if (index($0, value))
        print $0, header > result[value]
  }' values.txt values_processed=1 data.txt

에서와 동일한 방법을 사용하십시오.이전 질문에 대한 답변, 그러나 파일 라인의 값 목록을 라인 번호를 기반으로 각 값에 대한 출력 파일 이름을 기록하는 연관 배열로 가져오고 부분 문자열 검색을 수행하기 위해 values.txt일치하는 대신 using을 사용하여 찾습니다 .values.txtdata.txtindex()/regex/

답변2

내 생각에 당신이 원하는 것은 (테스트되지 않은) 것입니다.

awk '
    NR==FNR {
        out[$1] = "result" NR ".txt"
        next
    }
    {
        for ( i=2; i<=NF; i++ ) {
            for ( str in out ) {
                if ( index($i,str) ) {
                    print $i, $1 > out[str]
                }
            }
        }
    }
' values.txt RS='' FS='\n' data.txt

value.txt가 큰 경우 "열린 파일이 너무 많음" 임계값이 초과될 수 있습니다. 이것이 문제인 경우 알려주시기 바랍니다.

관련 정보