我们有一个名为parameters.txt的文件,其中包含逗号分隔值:
db.hostname,db.username,db.password,db.url,db.status,codesettingsA, codesettimgsB
另外,我们有一个名为properties.txt的主文件,其中包含行格式
db.hostname=hostname
db.username=username
db.password=password
我需要在parameters.txt中传递逗号分隔值,并检查它是否存在于properties.txt中。如果它不存在,它应该打印properties.txt的底部
例如,在properties.txt:db.url中,db.status,codesettingsA和codesettimgsB不存在。但是,我从parameters.txt传递。它应该被追加,结果在properties.txt中应该是这样的:
db.url
db.status
codesettingsA
codesettimgsB
注意:已在属性文件中为db.hostname = hostname,db.username = username和db.password = password声明已有值。我从参数文件传递db,hostname,db.username,db.password。因此,即使在逗号之后也应该忽略这些值,并且不应该打印db,hostname,db.username,db.password
有没有办法在properties.txt的底部打印它们? 你能提供示例代码吗?
答案 0 :(得分:2)
试试这个:
IFS=',' read -ra params < parameters.txt
for param in "${params[@]}"; do
grep "$param" properties.txt || echo "$param" >> properties.txt
done
解析参数并将其存储到params
数组中。
对于每个参数,循环检查它是否存在于properties.txt中,如果不存在,则将其附加到文件的底部。
答案 1 :(得分:1)
你可以使用这个awk:
awk 'FNR==NR{for (i=1; i<=NF; i++) a[$i]; next} $1 in a{delete a[$1]} 1;
END{for (i in a) print i "="}' FS=' *, *' params.txt FS=' *= *' props.txt
<强>输出:强>
db.hostname=hostname
db.username=username
db.password=password
codesettimgsB=
db.url=
codesettingsA=
db.status=
答案 2 :(得分:0)
cat properties.txt <(grep -vf properties.txt <(tr ',' '\n' <parameters.txt))
tr ..
将csv格式的记录转换为换行符,grep ..
找不到参数.txt中的行,cat ..
追加它们