我有两个大文件,a.txt和b.txt
每一个都包含很多这样的条目:
假设a.txt有这些:
12 entry1
23 entry2
34 entry4
...
b.txt有:
14 entry1
25 entry3
14 entry4
...
如何在保持uniq条目不变的情况下对同一条目进行减法?例如
a.txt-b.txt会给我
entry1: 12-14 = -2
entry2: 23
entry3: 25
entry4: 34-14 = 20
...
我想不通,请帮忙。
我知道awk应该是个好办法,但就是想不出来。
谢谢
最佳答案
这是一个没有awk的版本,它可以帮助您完成awk脚本:
#!/bin/bash
#substraction.sh
file1="a.txt"
file2="b.txt"
echo "">myTempFile.txt
fileTemp="myTempFile.txt"
lin1=$(wc -l $file1 | cut -d " " -f 1)
lin2=$(wc -l $file2 | cut -d " " -f 1)
if [ $lin1 -lt $lin2 ]; then
lineas=$lin2
myfileBIG=$file2
myfileTINY=$file1
else
lineas=$lin1
myfileBIG=$file1
myfileTINY=$file2
fi
ind=1
echo "Total of lines: "$lineas
#### myfileBIG with myfileTINY
while [ $ind -le $lineas ] #less than or equal to
do
mynum1=$(sed -n "$ind"p $myfileBIG | cut -d " " -f 1)
mydat1=$(sed -n "$ind"p $myfileBIG | cut -d " " -f 2)
mynum2=$(cat $myfileTINY | grep $mydat1 | cut -d " " -f 1)
#echo "$mynum1**$mydat1**$mynum2"
if [ -n "$mynum2" ]; then
result=$(($mynum1-$mynum2))
echo "$mydat1: $mynum1-$mynum2=$result"
echo "$mydat1: $mynum1-$mynum2=$result">>myTempFile.txt
else
result=""
echo "$mydat1: $mynum1"
echo "$mydat1: $mynum1">>myTempFile.txt
fi
ind=$(($ind+1))
#echo "Posicion: $ind de $lineas"
done
#### myfileTINY with myTempFile
echo "Using temp file..."
ind=1
if [ $lineas -eq $lin1 ]; then
lineas=$lin2
else
lineas=$lin1
fi
echo "Total of lines: "$lineas
while [ $ind -le $lineas ]
do
mynum1=$(sed -n "$ind"p $myfileTINY | cut -d " " -f 1)
mydat1=$(sed -n "$ind"p $myfileTINY | cut -d " " -f 2)
mynum2=$(cat $fileTemp | grep $mydat1 | cut -d " " -f 1)
#echo "$mynum1**$mydat1**$mynum2"
if [ -z "$mynum2" ]; then
echo "$mydat1: $mynum1"
echo "$mydat1: $mynum1">>myTempFile.txt
fi
ind=$(($ind+1))
#echo "Posicion: $ind de $lineas"
done
echo "...Done!"
echo "Result:"
sort -b myTempFile.txt
执行如下:
bash ./substraction.sh
结果:
关于linux - 在Linux中的两个文本文件之间进行减法的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33178254/