我有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的新手,所以我们将非常感谢您的帮助。提前致谢
答案 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