我理解这是一个普遍的问题,但是我想提出一个简单的解决方案。
我想将1 and 2
中的TEST_FILE_2.csv
列与2 and 3
中的TEST_FILE_1.csv
列进行匹配,并为匹配的行从columns 1 and 2
中打印TEST_FILE_2.csv
{{1}的columns 4 and 5
,最后是TEST_FILE_1.csv
的{{1}}。
我已经搜索了很多方法,但是一直很简短。在下面查看我的最新工作
column 3
我坚持只打印TEST_FILE_2.csv
的{{1}}和awk -F ',' 'NR==FNR{ a[$2,$3]=$4; next } { s=SUBSEP; k=$1 s $2 }k in a{ print $0,a[k] }' text_file1.txt.txt text_file2.txt.txt > TESTDUMMY
中的test_file_2
的整行(而不是按期望的顺序)。非常感谢您的帮助。
test_file_1.csv
column 4
test_file_2.csv
test_file_1
所需的输出
302932,181,352,1709810.639,5683471.356
302933,181,353,1709825.639,5683471.356
302934,181,354,1709840.639,5683471.356
302935,181,355,1709855.639,5683471.356
302936,181,356,1709870.639,5683471.356
302937,181,357,1709885.639,5683471.356
302938,181,358,1709900.639,5683471.356
302939,181,359,1709915.639,5683471.356
302940,181,360,1709930.639,5683471.356
302941,181,361,1709945.639,5683471.356
302942,181,362,1709960.639,5683471.356
302943,181,363,1709975.639,5683471.356
302944,181,364,1709990.639,5683471.356
302945,181,365,1710005.639,5683471.356
302946,181,366,1710020.639,5683471.356
302947,181,367,1710035.639,5683471.356
302948,181,368,1710050.639,5683471.356
302949,181,369,1710065.639,5683471.356
302950,181,370,1710080.639,5683471.356
电流输出
181,353,25
181,359,66
185,260,55
189,361,12
181,368,3
答案 0 :(得分:1)
这可以做到:
awk -F, 'FNR==NR {a[$1,$2]=$3;next} ($2,$3) in a {print $0","a[$2,$3]}' test_file_2.csv test_file_1.csv
302933,181,353,1709825.639,5683471.356,25
302939,181,359,1709915.639,5683471.356,66
302948,181,368,1710050.639,5683471.356,3
FNR==NR {a[$1,$2]=$3;next}
读取文件2和存储在ID为1列和2列的数组中的第3列($2,$3) in a
测试是否在数组中找到文件1的第2列和第3列如果不需要文件1中的第一列,则可以执行以下操作:
awk -F, -v OFS=, 'FNR==NR {a[$1,$2]=$3;next} ($2,$3) in a {print $2,$3,$4,$5,a[$2,$3]}' test_file_2.csv test_file_1.csv
awk -F, 'FNR==NR {a[$1,$2]=$3;next} ($2,$3) in a {f=a[$2,$3];sub(/^[^,]+,/,"");print $0","f}' test_file_2.csv test_file_1.csv
181,353,1709825.639,5683471.356,25
181,359,1709915.639,5683471.356,66
181,368,1710050.639,5683471.356,3
答案 1 :(得分:0)
您很近,但是在这里您需要使用组合的$1$2
来捕获数组中file2的信息,然后在检查组合是否存在于file2中时使用组合的$2$3
,例如
awk -F, -v OFS=, '
NR==FNR {a[$1$2]=$3; next}
$2$3 in a {print $2,$3,$4,$5,a[$2$3]}
' tf2.csv tf1.csv
使用/输出示例
分别将文件放在tf1.csv and
tf2.csv中,您只需将鼠标粘贴/中键粘贴到终端中进行测试即可,例如
$ awk -F, -v OFS=, '
> NR==FNR {a[$1$2]=$3; next}
> $2$3 in a {print $2,$3,$4,$5,a[$2$3]}
> ' tf2.csv tf1.csv
181,353,1709825.639,5683471.356,25
181,359,1709915.639,5683471.356,66
181,368,1710050.639,5683471.356,3