我有2个文件:
file1.txt
rs142159069:45000079:TACTTCTTGGACATTTCC:T 45000079
rs111285978:45000103:A:AT 45000103
rs190363568:45000168:C:T 45000168
file2.txt
rs142159069:45000079:TACTTCTTGGACATTTCC:T rs142159069
rs111285978:45000103:A:AT rs111285978
rs190363568:45000168:C:T rs190363568
使用file2.txt,我想用第2列中的条目替换名称(file1.txt的column2,即file2.txt的column1)。输出文件将是:
rs142159069 45000079
rs111285978 45000103
rs190363568 45000168
我尝试输入file2.txt的列但没有成功:
while read -r a b
do
cat file1.txt | sed s'/$a/$b/'
done < file2.txt
我是bash的新手。此外,不知道如何使用我的命令编写输出文件。任何帮助都将深表感谢。
答案 0 :(得分:0)
在您的情况下,如果您愿意接受没有awk
的答案,则使用perl
或sed
会更容易:
awk '(NR==FNR){out[$1]=$2;next}{out[$1]=out[$1]" "$2}END{for (i in out){print out[i]} }' file2.txt file1.txt > output.txt
output.txt:
rs142159069 45000079
rs111285978 45000103
rs190363568 45000168
注意:这假设column1中的所有符号都是唯一的,并且它们都存在于两个文件中
说明:
(NR==FNR){out[$1]=$2;next}
:在解析第一个文件时,创建一个名称从第一列作为键的地图{out[$1]=out[$1]" "$2}
:追加第二列的值END{for (i in out){print out[i]} }
:打印地图中的所有值答案 1 :(得分:0)
显然$2
file2
属于$1
file1
的一部分,因此您可以使用awk并重新定义FS
:
$ awk -F"[: ]" '{print $1,$NF}' file1
rs142159069 45000079
rs111285978 45000103
rs190363568 45000168