我有一个文件text.txt,其中包含以下记录:
xyz[4.3],default,
harry[1.0],default,
molly[1.1],default,
abc[1.0],rome,
abc[1.1],rome,
abc[1.2],rome,
abc[1.4],rome,
abc[2.1],default,
abc[2.2],default,
ghi[1.0],moon,
ghi[1.1-Test],moon,
def[3.9],default,
def[4.2],default,
现在我将基于该变量输入记录名称作为变量,这些记录应该被过滤到新文件
例如: 对于上面的text.txt文件,如果我输入abc,罗马作为变量,outputfile.txt应该只有以下记录:
abc[1.0],rome,
abc[1.1],rome,
abc[1.2],rome,
abc[1.4],rome,
我试过了:
final_order=$(awk -F/ -v RS=',|\n' \
'FNR==NR{a[$1] = (a[$1])? a[$1] "," $0 : $0 ; next}
{s = (s)? s "," a[$1] : a[$1]}
END{print s}' ./temp/test.txt ./temp/variable)
答案 0 :(得分:1)
在bash中使用参数扩展为grep:
创建正则表达式search=abc,rome
grep "^${search/,/\[[^]]*\],}" text.txt
扩展名取代了与\[[^]]*\],
相匹配的逗号,而不是[
,]
本身和逗号。
答案 1 :(得分:1)
使用awk你可以这样做:
awk -v s='abc,rome' 'BEGIN{sub(/,/, "[^,]*&", s)} $0 ~ s' test.txt
abc[1.0],rome,
abc[1.1],rome,
abc[1.2],rome,
abc[1.4],rome,
sub(/,/, "[^,]*&", s)
会将搜索字词abc,rome
转换为abc[^,]*,rome
。
答案 2 :(得分:1)
在这种情况下,我认为最简单的是:
awk'/,罗马/'文件
ABC [1.0],罗马,
ABC [1.1],罗马,
ABC [1.2],罗马,
ABC [1.4],罗马,