![](/img/trans.png)
[英]Shell Scripting - Reading properties file and Addition (mathematical) of two variables
[英]Assignment of variables in shell scripting
我正在尝试编写一个shell脚本来模拟以下问题:
文件A包含一些条目,例如
a
b
c
并且文件B包含
a
g
d
t
q
c
最终文件应具有
(文件b中的内容不在文件a中)
g
d
t
q
我正在尝试类似的事情,但是没有用:
for i in `cat b` ; do if[ (grep $i a) != $i ] then echo $i; done
排序文件,然后使用comm
。 在bash
:
comm -13 <(sort a) <(sort b)
假设您的bash
足够新(Mac OS X 10.7.3上的3.2版本还不够新; 4.1可以),并且文件是a
和b
。 <(sort a)
是进程替换; 它在a
上运行sort
,并将输出作为第一个文件发送到comm
; 类似地用于<(sort b)
。 comm -13
选项仅在第一个文件( 1
,又名a
)和两个文件( 3
)中禁止显示行,因此仅在2
或b
保留行。
您的命令:
for i in `cat b` ; do if[ (grep $i a) != $i ] then echo $i; done
显示了许多问题-四个单独的语法问题:
[
(
echo
前的分号 fi;
done
之前 修复它们可以得到:
for i in `cat b`; do if [ $(grep $i a) != $i ]; then echo $i; fi; done
您还可以使用:
for i in `cat b`
do
if grep $i a > /dev/null
then : in both files
else echo $i
fi
done
您的代码有一些错误:
忘记了if语句的关闭:fi
“ grep $ ia”必须解释为命令,例如$(grep $ ia)或`grep $ ia`
您必须在$(grep $ ia)周围添加一些字符,以避免空字符串比较,例如“:”或其他任何东西。
解:
for i in `cat b` ; do if [ :$(grep $i a) != :$i ] ;then echo $i;fi; done
假设A
和B
是您的文件,可以通过diff
完成
diff A B | grep '^>' | cut -d ' ' -f 2-
pearl.260> cat file3
i
a
b
c
pearl.261> cat file4
a
g
d
t
q
c
pearl.262> nawk 'FNR==NR{a[$1];next}!($1 in a)' file3 file4
g
d
t
q
pearl.263>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.