문자열을 찾은 다음 일치하는지 기록하는 코드가 있습니다. 문자열이 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) }'