Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于唯一对组合将列从一个文件合并到另一个文件_Python_Unix_Awk_Merge_Multiple Columns - Fatal编程技术网

Python 基于唯一对组合将列从一个文件合并到另一个文件

Python 基于唯一对组合将列从一个文件合并到另一个文件,python,unix,awk,merge,multiple-columns,Python,Unix,Awk,Merge,Multiple Columns,我需要将文件2的“值”列合并到文件1中,以使col1-col2唯一对组合保持不变。可以跳过不匹配的组合。我是python/awk的新手。因此,我需要指导方针或想法来解决问题 我没有使用python pandas软件包的权限,因此希望有其他替代解决方案 提前感谢您的支持 文件1 文件2 期望输出: 输出应该是什么样子?只需要将“value”列从File2合并到File1。可以跳过不匹配的值。很快将用所需的输出编辑我的问题。Tnx@Batman@Batman ... 我已经添加了所需的输出输出应

我需要将文件2的“值”列合并到文件1中,以使col1-col2唯一对组合保持不变。可以跳过不匹配的组合。我是python/awk的新手。因此,我需要指导方针或想法来解决问题

我没有使用python pandas软件包的权限,因此希望有其他替代解决方案

提前感谢您的支持

文件1 文件2 期望输出:


输出应该是什么样子?只需要将“value”列从File2合并到File1。可以跳过不匹配的值。很快将用所需的输出编辑我的问题。Tnx@Batman@Batman ... 我已经添加了所需的输出输出应该是什么样子?只需要将“value”列从File2合并到File1。可以跳过不匹配的值。很快将用所需的输出编辑我的问题。Tnx@Batman@Batman ... 我添加了所需的输出建议:预先定义
k=$1fs$2
并用
k
替换实例。建议:预先定义
k=$1fs$2
并用
k
替换实例。
  col1 col2                    

    559 1   558 1
    559 0   558 0
    558 1   557 1
    558 0   557 0
    504 2   255 0
    504 1   192 0
    504 0   367 0
    255 0   187 1
    227 0   185 0
    192 0   187 0
    187 0   185 1
    185 0   183 1
    183 0   171 1
    171 0   9   0
    1236    1   766 0
    1236    0   903 0
  col1 col2              value
    559 1   91987224    2400000000
    559 0   91987224    100000000
    558 1   64064811    2400000000
    558 0   91987224    100000000
    557 1   59966218    2400000000
    557 0   64064811    100000000
    555 0   59966218    2500000000
    533 0   87947477    5000000000
    504 2   53048833    1000000000
    504 1   19225707    100000000
    504 0   35811624    5000000000
    255 0   1687416 2800000000
    227 0   101635574   100000000
    192 0   7894664 100000000
    187 0   1687416 2900000000
    185 0   1687416 3000000000
    183 0   1687416 4000000000
    171 0   1687416 5000000000
    559 1   2400000000
    559 0   100000000
    558 1   2400000000
    558 0   100000000
    557 1   2400000000
    557 0   100000000
    555 0   2500000000
    533 0   5000000000
    504 2   1000000000
    504 1   100000000
    504 0   5000000000
    255 0   2800000000
    227 0   100000000
    192 0   100000000
    187 0   2900000000
    185 0   3000000000
    183 0   4000000000
    171 0   5000000000
    1236 1   -
    1236 0   -
$ cat a.awk
# Create an index from the first two columns
{ k = $1 FS $2 }

# Read file2 values (first on the command line) into an array
NR == FNR { a[k] = $4; next }

# Read file1, retrieving and printing the values from file2 where available
# After printing, delete the element we've already used
{ print $1, $2, k in a ? a[k] : "-"; delete a[k] }

# Print any left over elements with their values
END { for (i in a) { print i, a[i] } }
# Run the command noting importance of file order
# Pipe output into reverse sort to match desired ouptut
$ awk -f a.awk file2 file1 | sort -r
559 1 2400000000
559 0 100000000
558 1 2400000000
558 0 100000000
557 1 2400000000
557 0 100000000
555 0 2500000000
533 0 5000000000
504 2 1000000000
504 1 100000000
504 0 5000000000
255 0 2800000000
227 0 100000000
192 0 100000000
187 0 2900000000
185 0 3000000000
183 0 4000000000
171 0 5000000000
1236 1 -
1236 0 -