Bash 过滤掉shell中文件中匹配的记录
我有一个文件text.txt,记录如下:Bash 过滤掉shell中文件中匹配的记录,bash,shell,unix,awk,Bash,Shell,Unix,Awk,我有一个文件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],def
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,rome作为变量,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)
在bash中使用参数展开为grep创建正则表达式:
search=abc,rome
grep "^${search/,/\[[^]]*\],}" text.txt
扩展将逗号替换为\[^]*\],
,它与[
匹配,而不是与]
匹配,]
本身和逗号匹配。使用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
,,在这种情况下,我认为最简单的是:awk'/,rome/'文件
abc[1.0],罗马,
abc[1.1],罗马,
abc[1.2],罗马,
abc[1.4],罗马,
嗨,anubhav,我们如何将o/p写入一个文件,以及如果我只有abc作为搜索词而不是abc,我们如何重新编写awk语句作为搜索词使用:
awk-v s='abc''BEGIN{sub(/,/,“[^,]*&”,s)}$0~s'test.txt>output.txt
其中>output.txt
用于将输出重定向到文件。