我有2个txt文件
档案1
vol12
abc_xyz
vmfs_unix
vol5
vol4
titan6lr_blr
文件2
vol12 ,cs_rvl
vol12 ,cvs_rvl
vol12 ,svn_rvl
vol12 ,swarch
abc_xyz ,abc_xyz
def6g ,def6g
vmfs_unix ,vmfs_unix
vol5 ,images
vol4 ,svn_blr
vol4 ,home4
我需要将文件1的vol12,vol5,vol4替换为文件2第2列中的相应值 输出应为:
cs_rvl
cvs_rvl
svn_rvl
swarch
abc_xyz
vmfs_unix
images
svn_blr
home4
titan6lr_blr
答案 0 :(得分:0)
使用循环读取file1并从file2中输出新值,如下所示:
while read line
do
if [[ $line =~ ^(vol12|vol5|vol4) ]]
then
grep "$line" file2 | cut -d, -f2
else
echo "$line"
fi
done < file1
输出:
cs_rvl
cvs_rvl
svn_rvl
swarch
abc_xyz
vmfs_unix
images
svn_blr
home4
titan6lr_blr
答案 1 :(得分:0)
这是另一个版本:
#!/bin/bash
arr=$(grep -v "^$" $1)
echo -n "" > $1
for match in ${arr}
{
i=$(grep ^$i -c $2)
if [ $i -eq 0 ]
then
echo $match >> $1
else
grep ^$match $2 | cut -d "," -f2 >> $1
fi
}
运行脚本以在file1中获取结果,如下所示:
./script.sh file1 file2
简要说明: 遍历file1的每一个非空行。每一行都是一个单词(根据问题)。然后对file2中的每个单词进行计数。如果count为零,则打印单词本身。否则,打印该单词的所有匹配的第二列。
答案 2 :(得分:0)
您可以使用纯awk解决方案:
awk -F"[, ]+" '$1 ~ /^vol/ && NR==FNR {
if ($1 in a)
a[$1]=a[$1] ORS $2;
else
a[$1]=$2;
next
}
NR>FNR && ($1 in a) {
print a[$1]
}
NR>FNR && !($1 in a) {
print $1
}' file2 file1