搜索长字符串(>50 个字符)并记录匹配项

搜索长字符串(>50 个字符)并记录匹配项

我有一段代码,用于查找字符串,然后记录是否匹配。当字符串不超过 50 个字符时,代码可以正常工作。但除此之外,假设对于 100 或 150 个字符的字符串,它仅基于字符串中的前 50 个字符而不是完整的 100/150 个字符的字符串进行匹配。

有没有办法确保它根据完整字符串长度来计算匹配项?我正在使用一个awk程序,因为目前的分数是基于生日并且小于一列,然后是长字符串匹配。

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并且两者首先使用的地方是在比较中$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) }'

相关内容