Bash根据另一个CSV中的标识符和替换列替换csv的列

时间:2018-03-28 18:16:24

标签: bash

我有2个CSV文件,其中第一个是我的主CSV,其中包含我需要的所有列。第二个CSV包含2列,其中第1列是标识符,第2列是替换值。例如

Main.csv

bbb abc
jjj def
eee ghi

replacement.csv

aaa 111 bbb 222 abc 333
ddd 444 eee 555 ghi 666
iii 777 jjj 888 def 999
lll 101 eee 201 ghi 301

我希望结果如下所示,例如,main.csv的第3列是replacement.csv的标识符和第1列。通过使用它作为标识符,main.csv的第5列应替换为replacement.csv的第2列。此外,main.csv可以有重复的值,因此所有值都应该更改为适当的替换值

while read col1 col2 col3 col4 col5 col6
do
    while read col7 col8
    do
        if[$col7==col3]
        then
            col5=col8
        fi
    done < RepCSV
done < MainCSV > MainCSV

我尝试了这样的代码

.filter()

但它没有用。 我是bash的新手,所以我们将非常感谢您的帮助。提前致谢

1 个答案:

答案 0 :(得分:0)

使用awk:

$ awk '
NR==FNR {                 # process the first file 
    a[$1]=$2              # hash $2 to a, $1 as key
    next                  # next record
}
{                         # second file
    $5=($3 in a?a[$3]:$5) ¤ replace $5 based on $3
}1' replacement main
aaa 111 bbb 222 abc 333
ddd 444 eee 555 ghi 666
iii 777 jjj 888 def 999
lll 101 eee 201 ghi 301