我有两个文件,file1 和 file2。
file1中的内容是:
ABC_DEC_EDC=ON
WER_QSD_RCS=ON
文件2的内容是:
TRD_OIY_REC=ON
YUH_PON_UYT=ON
WER_QSD_RCS=OFF
我必须逐行检查 file2 中的内容。
第一的
if ABC_DEC_EDC=ON
file2 中不存在,然后添加到 file2。
第二
在第一个文件中,SAX_IUY_TRE=OFF
有OFF
; 但在文件 2 中,SAX_IUY_TRE=ON
有ON
;在这种情况下,我只想更新文件OFF
。
例子:SAX_IUY_TRE=OFF
所有更新仅发生在 file2 中。
输出应该是:
ABC_DEC_EDC=ON
WER_QSD_RCS=ON
WER_RTC_YTC=ON
WER_QSD_RCS=OFF
答案1
sh
执行。
#!/bin/sh
while read -r LINE
do
setting=$(echo $LINE | sed 's/=.*//')
switch=$(echo $LINE | sed 's/.*=//')
found=$(grep "$setting" file2)
if [ -z "$found" ]
then
echo $LINE >> file2
else
if [ "$switch" != "$(echo $found | sed 's/.*=//')" ]
then
sed -i "s/\($setting\).*/\1=$switch/" file2
fi
fi
done < file1
该脚本将翻转在两个不匹配的文件中找到的设置值。
答案2
它可以在 bash 中制作。
#! /bin/bash
file1="/tmp/output1.txt"
file2="/tmp/livefile1.txt"
cat $file1 | while read LINE; do
KEY=${LINE%=*}
CURRENT=$(grep $KEY= $file2)
if [ -z "$CURRENT" ]; then # if $CURRENT is empty
echo NOT found $KEY in $file2, add it
echo $LINE >> $file2
else
if [ "$LINE" != "$CURRENT" ]; then
echo Found $KEY in $file2 and state has changed
sed -i -e "s/^$KEY=.*\$/$LINE/" $file2
fi
fi
done
并运行命令:
./update.bash
输出到屏幕:
NOT found ABC_DEC_EDC in /tmp/livefile1.txt, add it
Found WER_QSD_RCS in /tmp/livefile1.txt and state has changed
NOT found ZXC_POY_YTR in /tmp/livefile1.txt, add it
NOT found ZXC_OPI_GHF in /tmp/livefile1.txt, add it
Found SAX_IUY_TRE in /tmp/livefile1.txt and state has changed
该脚本读取所有行$file1
。 KEY 设置为=
关键之前的部分。然后grep
搜索key,$file2
如果没有找到就添加。如果找到密钥,则检查状态是否已更改,sed
如果已更改则更新它。
编辑:改成看起来更像调查问卷才会用到的。