文字列を見つけて一致するかどうかを記録するコードがあります。文字列が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) }'