我的问题可能不太清楚......所以让我们来样本数据...
的fileA
162,400
174402个
175404个
187,406
FILEB
E-J1-N5,319319,240248,364364,的 162162
F-J6-N1,380380,250250,360360,的 162174
E-J6-N2,380380,240240,364374, 175187
通缉输出
E-J1-N5,319319,240248,364364,的 400400
F-J6-N1,380380,250250,360360,的 400402
E-J6-N2,380380,240240,364374, 404406
所以我需要用field2(fileA)替换所有出现的field1(fileA),但是在另一个文件fileB(field $ 5)中。
这是我可以工作的。存储在两个变量中:recordx(field1)和recordx(field2)。我的NOT代码:
#!/bin/bash
for record in fileA
do
field1=`cut -d, -f 1 $record`
field2=`cut -d, -f 2 $record`
awk -v var1=$field1 -v var2=$field2 -F, '{sub(/var1/,"var2",$5);print}' fileB
done
我收到错误:
awk:无法打开175(没有这样的文件或目录)
为什么awk试图打开一个变量? 我是朝着一个好方向前进的吗?
非常感谢任何帮助!
答案 0 :(得分:1)
awk
救援
awk 'NR==FNR{
a[$1]=$2
next
}
{
match($5,/(...)(...)/,b)
$5=a[b[1]] a[b[2]]
}1' FS="," OFS="," fileA fileB
$ awk 'NR==FNR{a[$1]=$2;next}{match($5,/(...)(...)/,b);$5=a[b[1]] a[b[2]]}1' FS="," OFS="," fileA >
E-J1-N5,319319,240248,364364,400400
F-J6-N1,380380,250250,360360,400402
E-J6-N2,380380,240240,364374,404406
答案 1 :(得分:0)
这可能适合你(虽然它是sed而不是像awk解决方案那样优雅):
sed '/^...,/{H;d};G;G;s/\(...\)\(...\)\n.*\n\1,\(...\).*\n\2,\(...\).*/\3\4/' file{A,B}
E-J1-N5,319319,240248,364364,400400
F-J6-N1,380380,250250,360360,400402
E-J6-N2,380380,240240,364374,404406
N.B。这假设将替换fileB的字段5中的所有数字。如果只有一些,那么查找/替换需要分成两个操作。