我想要合并2个文件,并将它们放在一个文件中[在[{1}},$4
和$5
中只有2个字段(FILE A
和$2
在$3
)中是两个文件之间的共同点]。见下面所需的输出。
FILE B
X 2134 101L 12345.00 22222.00 1 10
X 2134 101L 12345.00 22222.00 11 20
X 2134 101L 12345.00 22222.00 21 30
X 2134 111L 77777.00 22222.00 1 10
X 2134 111L 77777.00 22222.00 11 20
X 2134 111L 77777.00 22222.00 21 30
X 2134 121L 56347.00 46678.00 1 10
X 2134 121L 56347.00 46678.00 11 20
X 2134 121L 56347.00 46678.00 21 3
3333 12345 22222 54367.05 34765.05
3333 34567 12235 54298.05 34568.05
3333 77777 22222 52765.05 32567.05
3333 55555 11111 52875.05 36547.05
3333 56347 46678 53789.05 34566.05
嗨,伙计们,
我添加了一张图片,我希望它能很好地描述我的要求。谢谢
the desired output
答案 0 :(得分:0)
下面的脚本适用于上述情况。
while read line
do
value1=`echo $line |awk '{print $1}'`
value2=`echo $line |awk '{print $2}'`
value4=`echo $line |awk '{print substr($0, index($0,$3))}'`
value3=`grep $value2 fileA.txt|head -n 1|awk '{print $2" "$3}'|sed 's/1L//'`
if [ "$value3" == "" ];then
echo $value1" NA NA "$value4 >> result.txt
else
echo $value1" "$value3" "$value2" "$value4 >> result.txt
fi
done<fileB.txt
输出:
3333 2134 10 12345 22222 54367.05 34765.05
3333 NA NA 12235 54298.05 34568.05
3333 2134 11 77777 22222 52765.05 32567.05
3333 NA NA 11111 52875.05 36547.05
3333 2134 12 56347 46678 53789.05 34566.05
PS:使用bash而不是sh来运行此脚本。
答案 1 :(得分:0)
awk
救援!
$ awk 'NR==FNR{$4=$4+0;$5=$5+0;
if(!(($4,$5) in a)) a[$4,$5]=$2 FS $7;;next}
{$2=((($2,$3) in a)?a[$2,$3]:"NA" FS "NA") FS $2}1' file{A,B}
3333 2134 10 12345 22222 54367.05 34765.05
3333 NA NA 34567 12235 54298.05 34568.05
3333 2134 10 77777 22222 52765.05 32567.05
3333 NA NA 55555 11111 52875.05 36547.05
3333 2134 10 56347 46678 53789.05 34566.05
你希望从fileA获得第一个匹配,其中有多个匹配,两个文件中的字段格式不匹配(小数点与整数)。
如果您输入... | column -t
3333 2134 10 12345 22222 54367.05 34765.05
3333 NA NA 34567 12235 54298.05 34568.05
3333 2134 10 77777 22222 52765.05 32567.05
3333 NA NA 55555 11111 52875.05 36547.05
3333 2134 10 56347 46678 53789.05 34566.05