从两个不同的文本文件中减去行值

时间:2015-07-30 18:10:09

标签: bash

我有两个文本文件,每个文件有一列有几行:
FILE1
  一个
  b
  c

FILE2
  d
  Ë
  f

我想创建一个具有以下输出的文件:
a - d
b - e
c - f

所有条目都是数字(小数)。我完全陷入困境,不知道如何继续。

3 个答案:

答案 0 :(得分:2)

使用paste似乎是明显的选择,但不幸的是,您无法指定多个字符分隔符。要解决此问题,您可以将输出传递给sed

$ paste -d- file1 file2 | sed 's/-/ - /'
a - d
b - e
c - f

粘贴将两个文件连接在一起,sed添加-周围的空格。

如果您想要的输出是减法的结果,那么您可以使用awk:

paste file1 file2 | awk '{ print $1 - $2 }'

答案 1 :(得分:1)

下式给出:

$ cat /tmp/a.txt
1
2
3
$ cat /tmp/b.txt
4
5
6

awk是处理这两个文件并做算术的好办法:

$ awk 'FNR==NR { a[FNR""] = $0; next } { print a[FN""]+$1 }' /tmp/a.txt /tmp/b.txt
5
7
9

或者,如果你想要字符串而不是算术:

$ awk 'FNR==NR { a[FNR""] = $0; next } { print a[FNR""] " - "$0 }' /tmp/a.txt /tmp/b.txt
1 - 4
2 - 5
3 - 6

答案 2 :(得分:1)

使用while和文件描述符的另一种解决方案:

while read -r line1 <&3  && read -r line2 <&4 
do 
#printf '%s - %s\n' "$line1" "$line2"
printf '%s\n' $(($line1 - $line2))
done 3<f1.txt 4<f2.txt