我有两个大文件,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中的两个文本文件之间进行减法的方法-LMLPHP

关于linux - 在Linux中的两个文本文件之间进行减法的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33178254/

10-16 20:36