为多个字符串循环遍历多个文件

时间:2013-10-11 21:00:03

标签: linux bash

这就是我想要做的事情:

file1val=cat data1 | awk '{print $5}'

file1nam=cat data1 | awk '{print $3}'

file2val=cat data2 | awk '{print $5}'

file3nam=cat data2 | awk '{print $3}'

if file1nam = file2name 

then do some code stuff for the file1val/file2val

否则跳过字符串然后继续,直到检查完所有字符串并将echo结果发送到单个文件

示例:

data1具有以下字符串

-rw-r--r-- 1 elmo red 13140667 Oct 13 22:20 65464654.tgz
-rw-r--r-- 1 oscar red 130667 Oct 13 22:20 6533464654.tgz
-rw-r--r-- 1 bert red 1313340667 Oct 13 22:20 654654.tgz

data2具有以下字符串

-rw-r--r-- 1 elmo red 130667 Oct 11 22:20 6564654.tgz
-rw-r--r-- 1 bert red 13667 Oct 11 22:20 65464654.tgz
-rw-r--r-- 1 snuffy red 13123123140667 Oct 11 22:20 65464654.tgz

如果在dat1和数据2中存在elmo(filenam),则运行它以比较其大小:

perc=bc <<< "scale=2; ($file2val - $file1val)/$file1val * 100"

并将结果输出到文件:

elmo $perc

bert $perc

这需要循环遍历data1和data2文件中存在的20行左右。

1 个答案:

答案 0 :(得分:0)

如果我正确地管理你的神圣意图,你基本上想要加入第三个字段的两个文件,并从第五个字段中的相应值计算结果?

awk 'NR==FNR { v[$3] = $5; next }
    $3 in v { printf("%s %5.2f\n", $3, ($5-v[$3])/v[$3]*100) }' data1 data2

这是一个相当常见的Awk习语; google for NR==FNR