長い文字列(> 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もanumeric stringで、2つの変数が使用される最初の場所は比較です$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) }'

関連情報