sed | grep在脚本中的奇怪行为

时间:2015-11-27 15:40:30

标签: bash sed

问题

我有两个文件,

File1中

  

INT1; INT2; INT3
INT4; INT5; INT6
INT7; INT7; INT9

文件2

  

INT1; INT2; INT3

接下来我将grep文件之间的区别,只采用第三​​列的整数。

  DIFFERENCE=`grep -vxFf File1 File2 | awk 'BEGIN { FS = ";" } ; { print $3 }'`

导致

  

INT6 INT9

接下来我想用换行符替换空格

echo $DIFFERENCE | sed 's/ /;\n/g'

导致

  

INT6;   
INT9

就像它应该的那样。

相反,当我在脚本中执行此操作时,它将返回

  

INT6   
INT9



为什么它在脚本中执行此操作,是否有解决方案/如何轻松修改我的结果?



原始代码 - 澄清

原始代码和输出

     CODE=`grep -vxFf $FOUND $COMPARETO | awk 'BEGIN { FS = ";" } ; { print $3 }'` 
     echo "$CODE;" | sed 's/ /;\n/g' > "testfile"   
  

8000070118157
  8002820000804个
  3394700015011;

1 个答案:

答案 0 :(得分:2)

您的中间输出在单行上不是INT6 INT9,而是已经有两行,因此sed不会替换任何内容。

您可以在awk本身执行所有操作,例如

$ awk -F';' 'NR==FNR{a[$0];next} !($0 in a){print $3 FS}' file2 file1
INT6;
INT9;

如果你不想要最后一个;,也许更容易管道到sed '$ s/;$//'