我想根据第二列的内容合并两个文件.
档案1:
"4742" "209220_at" 2.60700394801826
"104" "209396_s_at" 2.60651442103297
"749" "202409_at" 2.59424724783704
"4168" "209875_s_at" 2.58773204877464
"3973" "1431_at" 2.52832098784342
"1826" "207201_s_at" 2.41685345240968
Run Code Online (Sandbox Code Playgroud)
文件2:
"653" "1431_at" 2.14595534191867
"1109" "207201_s_at" 2.13777517447307
"353" "212531_at" 2.12706340284672
"381" "206535_at" 2.11456707231618
"1846" "204534_at" 2.10919474441178
Run Code Online (Sandbox Code Playgroud)
到最后:
"3973" "1431_at" 2.52832098784342 "653" "1431_at" 2.14595534191867
"1826" "207201_s_at" 2.41685345240968 "1109" "207201_s_at" 2.13777517447307
Run Code Online (Sandbox Code Playgroud)
我试过了comm,diff一些不起眼awk的单线,没有任何成功.任何帮助非常感谢.本
您可以使用sort和join命令的组合来完成此操作.直截了当的方法是
join -j2 <(sort -k2 file1) <(sort -k2 file2)
Run Code Online (Sandbox Code Playgroud)
但这显示出与您正在寻找的略有不同.它只显示公共连接字段,然后显示每个文件的其余字段
"1431_at" "3973" 2.52832098784342 "653" 2.14595534191867
"207201_s_at" "1826" 2.41685345240968 "1109" 2.13777517447307
Run Code Online (Sandbox Code Playgroud)
如果您需要与您显示的格式完全一致,那么您需要以join这种方式告诉输出
join -o 1.1,1.2,1.3,2.1,2.2,2.3 -j2 <(sort -k2 file1) <(sort -k2 file2)
Run Code Online (Sandbox Code Playgroud)
其中-o接受FILENUM.FIELDNUM说明符列表.
请注意,<()我使用的语法不是POSIX sh,因此如果需要POSIX sh语法,则应该排序为临时文件.
awk '
# store the first file, indexed by col2
NR==FNR {f1[$2] = $0; next}
# output only if file1 contains file2's col2
($2 in f1) {print f1[$2], $0}
' file1 file2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7700 次 |
| 最近记录: |