我有一段代码,用于查找字符串,然后记录是否匹配。当字符串不超过 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) }'