我有两个文本文件,每个文件有一列有几行:
FILE1
一个
b
c
FILE2
d
Ë
f
我想创建一个具有以下输出的文件:
a - d
b - e
c - f
所有条目都是数字(小数)。我完全陷入困境,不知道如何继续。
答案 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