匹配和替换列
Matching and replacing columns
我正在尝试匹配两个文件的前两列,如果匹配,则用另一列替换单个列的值。
如果 file1 的第 1 列和第 2 列匹配 file2 的第 1 列和第 2 列,那么我想用文件 2 的第 3 列替换 file1 的第 2 列。我最初使用的是 awk,但我不确定如何匹配两个每个文件的列,而不仅仅是一个:
awk -vOFS='\t' 'NR==FNR{a[]=;a[]=; next}{=a[]; =a[]; print}' file2.txt file1.txt
提前感谢您的帮助!
文件 1:
112 name1 aaaaa
111 name1 aaaaa
122 name2 bbbbb
133 name3 ccccc
文件 2:
111 name1 sarah
122 name2 brittany
133 name3 tony
当前输出:
sarah aaaaa
111 sarah aaaaa
122 brittany bbbbb
133 tony ccccc
预期输出:
112 name1 aaaaa
111 sarah aaaaa
122 brittany bbbbb
133 tony ccccc
使用awk
$ awk 'FNR==NR {array[]=; next} {if ( ~ array[]) print [=10=]; if ( !~ array[]) print , array[], $NF}' file2 file1
112 name1 aaaaa
111 sarah aaaaa
122 brittany bbbbb
133 tony ccccc
请您尝试以下操作:
awk -v OFS='\t' 'NR==FNR {a[,] = ; next} {if (length(a[,])) = a[,]} 1' file2.txt file1.txt
输出:
112 name1 aaaaa
111 sarah aaaaa
122 brittany bbbbb
133 tony ccccc
(保留中间的空白行)
我正在尝试匹配两个文件的前两列,如果匹配,则用另一列替换单个列的值。
如果 file1 的第 1 列和第 2 列匹配 file2 的第 1 列和第 2 列,那么我想用文件 2 的第 3 列替换 file1 的第 2 列。我最初使用的是 awk,但我不确定如何匹配两个每个文件的列,而不仅仅是一个:
awk -vOFS='\t' 'NR==FNR{a[]=;a[]=; next}{=a[]; =a[]; print}' file2.txt file1.txt
提前感谢您的帮助!
文件 1:
112 name1 aaaaa
111 name1 aaaaa
122 name2 bbbbb
133 name3 ccccc
文件 2:
111 name1 sarah
122 name2 brittany
133 name3 tony
当前输出:
sarah aaaaa
111 sarah aaaaa
122 brittany bbbbb
133 tony ccccc
预期输出:
112 name1 aaaaa
111 sarah aaaaa
122 brittany bbbbb
133 tony ccccc
使用awk
$ awk 'FNR==NR {array[]=; next} {if ( ~ array[]) print [=10=]; if ( !~ array[]) print , array[], $NF}' file2 file1
112 name1 aaaaa
111 sarah aaaaa
122 brittany bbbbb
133 tony ccccc
请您尝试以下操作:
awk -v OFS='\t' 'NR==FNR {a[,] = ; next} {if (length(a[,])) = a[,]} 1' file2.txt file1.txt
输出:
112 name1 aaaaa
111 sarah aaaaa
122 brittany bbbbb
133 tony ccccc
(保留中间的空白行)