我正在尝试使用substr在循环中运行它来匹配特定位置的字符串
例如,我的cardfile.txt包含
h2 {
color: #fff;
font-family: Minion Pro, Times New Roman, serif;
font-size: 42px;
font-weight: 700;
font-style: italic;
text-align: center;
padding-top: 25px;
margin-bottom: 15px;
margin-top: 0; /* This one */
}
我的输入文件是
01
02
我想在输出行的前2个字符中包含01或02,如下所示
02AAA45678
04BBB04673
01CCC63848
05DDD07494
02AAA45678
01CCC63848
如果我试图通过直接在substr中给出字符串来运行,例如“ 02”,则它可以正常工作,但是如果给出$ i,则它与字符串不匹配
预先感谢
答案 0 :(得分:0)
问题在于您的变量$i
包含在“单引号”中,这阻止了bash的变量扩展。
这个问题也问同样的问题,并且在awk脚本中使用bash变量(例如$i
)提供了一些好的解决方案。
答案 1 :(得分:0)
我假设您的cardfile.txt应该像这样分解:
02AAA45678
04BBB04673
01CCC63848
05DDD07494
您是否需要在循环中使用awk?如何使用grep:
grep -E '^(01|02)' cardfile.txt
如果必须使用awk,请尝试以下操作:
for i in `cat cardfile.txt `; do awk 'substr($0,1,2) == "'"$i"'" {print} ' input.txt >> output.txt; done
由于单引号和您的shell扩展(或在这种情况下不扩展)$ i的方式,您遇到了麻烦。