긴 문자열(>50자)을 검색하고 일치 항목을 기록합니다.

긴 문자열(>50자)을 검색하고 일치 항목을 기록합니다.

문자열을 찾은 다음 일치하는지 기록하는 코드가 있습니다. 문자열이 50자를 넘지 않으면 코드가 제대로 작동합니다. 그러나 그 이상으로 100자 또는 150자 문자열의 경우 전체 100/150자 문자열이 아닌 문자열의 처음 50자를 기준으로만 일치한다고 가정해 보겠습니다.

전체 문자열 길이를 기준으로 일치 항목을 계산하는 방법이 있습니까? 저는 awk현재 점수가 생일을 기준으로 하고 열이 1개 미만이므로 긴 문자열이 일치하는 프로그램을 사용하고 있습니다.

want2=$( awk '{print $4}' temp10_0.txt | head -1 )
dob_want2=$(head -1 year.txt )
awk -v a="$want2" -v b="$dob_want2" '{ if ($1==a && $2<=b) print $0, "1";else print $0, "0"}' temp25_0.txt>  temp11_0.txt
  • 입력 데이터 temp25_0.txt는 다음과 같습니다
    51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 2016 
    51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 2008  
    51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 2013
    51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 2000
    51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 1987
    51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 1965
    51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555150000555555515515551011155111555115155101155511 2000
    51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555000551511115555555155155511111551115551151551111555 2007
    51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111150500 2016
    
  • want2
    51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511
    
  • dob_want2
    2019
    
  • 원하는 출력은
    51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 2016 1
    51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 2008 1  
    51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 2013 1
    51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 2000 1
    51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 1987 1
    51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 1965 1
    51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555150000555555515515551011155111555115155101155511 2000 0
    51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555000551511115555555155155511111551115551151551111555 2007 0
    51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111150500 2016 0
    

(줄이 더 짧으면 읽기가 더 쉬울 것이라는 것을 알고 있지만 여기서는 줄 길이가 전체 문제인 것 같습니다.) 어떤 조언이라도 크게 감사하겠습니다.

답변1

$1예를 들어 숫자처럼 보이는 입력은 (대략) 유형 numeric string(일명 strnum)이므로 처음 사용되는 상황에 따라 문자열이나 숫자로 처리됩니다. 변수 a도 a numeric string이고 두 변수가 사용되는 첫 번째 장소는 비교입니다 $1==a. 비교 유형 표에 따르면https://www.gnu.org/software/gawk/manual/gawk.html#Typing-and-Comparisonstrnum은 strnum과 비교할 때 숫자로 처리되지만 큰 숫자의 정밀도 손실을 방지하려면 문자열로 처리해야 하므로 비교 시 strnum으로 만들기 위해 비교 양쪽에 빈 문자열을 연결해야 합니다. 문자열로, 이는 문자열 비교입니다.

awk -v a="$want2" -v b="$dob_want2" '{ print $0, ($1==(a"") && $2<=b) }'

관련 정보