0

我有两个文件:file1 和 file2 如下:

文件 1 文件 2
橙汁 orangejuice_9.88_9.88
菠萝汁appleslices_6.3_2.2
苹果片菠萝汁_1.2_3.9
芒果汁 Mangojuice_5.55_5.55

输出应该是:

橙汁_988
菠萝汁_120_390
appleslices_630_220
芒果汁_555

从 file1 逐行读取时,在 file2 中查找 file1 所在行中的模式,找到后比较 file2 的第 2 和第 3 字段,如果相同则打印一次,否则打印两个数字。(无论如何,数字应该乘以 100)

我想到了这个:

while read -r -u 3 line1
do
nawk ' "$line1" print $0}' file2.txt
if "$2" == "$3"
then echo "scale=2;$2*100" |bc
else echo "$2_$3"
fi
done 3<file1.txt

所以,我想知道逻辑是否正确,并修复将给我 988 而不是 988.0 的乘法。

4

2 回答 2

1

纯粹用 Awk 表达你的逻辑要容易得多。假设 的作用file1是将数据限制file2为仅某些记录(您的示例似乎没有证明这一点),请尝试这样的事情。

awk -F _ '# Make OFS equal to FS
    BEGIN { OFS=FS }
    # Read file1 into a[]
    NR==FNR { a[$0]++; next }
    # If we fall through to here, we are in file2
    # On any lines where $1 is in a[]
    a[$1] {
        if ($2==$3) print $1, $2*100;
        else print $1, $2*100, $3*100;
    }' file1 file2
于 2013-08-11T16:24:53.670 回答
1

一种方法GNU awk

$ awk 'NR==FNR{a[$0];next}($1 in a){print $1,$2==$3?$2*100:$2*100OFS$3*100}' FS=_ OFS=_ file1 file2
orangejuice_988
appleslices_630_220
pineapplejuice_120_390
Mangojuice_555
于 2013-08-11T16:26:00.513 回答