Bash 将字符从列表转换到我的文件

Bash 将字符从列表转换到我的文件,bash,shell,awk,tr,Bash,Shell,Awk,Tr,我有很多文件看起来像这样: 136 155 223 783 344 455 230 . . . 和另一个类似的文件(字典): 我想要一个新文件,它看起来像这样,从我的第一个文件中读取字符,并用第1列中另一个文件中的匹配项替换它们: rs11805559 rs728917 rs728918 rs11264495 rs1609666 rs1609666 rs1171564 rs6427315 提前感谢这可能是一种方式: $ awk 'NR==FNR {a[$2]=$1; next} $1=a[$

我有很多文件看起来像这样:

136
155
223
783
344
455
230
.
.
.
和另一个类似的文件(字典):

我想要一个新文件,它看起来像这样,从我的第一个文件中读取字符,并用第1列中另一个文件中的匹配项替换它们:

rs11805559
rs728917
rs728918
rs11264495
rs1609666
rs1609666
rs1171564
rs6427315
提前感谢

这可能是一种方式:

$ awk 'NR==FNR {a[$2]=$1; next} $1=a[$1]' file2 file1
rs11805559
rs728917
rs728918
rs11264495
rs1609666
rs1171564
rs6427315
解释 首先,它循环第二个文件并存储数组
a[number]=rxxxx
。然后它循环遍历第一个文件,并用其在数组中的值替换该字段。

这可以是一种方法:

$ awk 'NR==FNR {a[$2]=$1; next} $1=a[$1]' file2 file1
rs11805559
rs728917
rs728918
rs11264495
rs1609666
rs1171564
rs6427315
解释 首先,它循环第二个文件并存储数组
a[number]=rxxxx
。然后它循环遍历第一个文件,并用其在数组中的值替换该字段。

for number in $(cat file1)
do
  grep " $number$" file2 | { read a b; echo "$a"; }
done
我不确定您的意思是,您的文件名为
136
155
,等等,或者您的文件内容与上面发布的内容类似。我现在假设是后者,因为你的帖子后来说它只是一个文件。请随意更正我的假设,然后我会调整我的答案。

这个怎么样:

for number in $(cat file1)
do
  grep " $number$" file2 | { read a b; echo "$a"; }
done

我不确定您的意思是,您的文件名为
136
155
,等等,或者您的文件内容与上面发布的内容类似。我现在假设是后者,因为你的帖子后来说它只是一个文件。请随意更正我的假设,然后我将调整我的答案。

另一种方法:创建一个脚本文件并使用它。(如果您有许多input.txt文件,则保存脚本文件有助于)

或者如果不需要脚本文件

sed -r 's|^(.*)\t(.*)|s/\2/\1/|' dictionary.txt | sed -f - input.txt

另一种方法:创建一个脚本文件并使用它。(如果您有许多input.txt文件,则保存脚本文件有助于)

或者如果不需要脚本文件

sed -r 's|^(.*)\t(.*)|s/\2/\1/|' dictionary.txt | sed -f - input.txt

伟大的工作起来很有魅力!泰!这甚至可以通过将
{$1=a[$1]}1
更改为
$1=a[$1]
来缩短一些,这是非常正确的,@Jotne,而且更清晰。刚刚更新,非常感谢。太好了!工作起来很有魅力!泰!这甚至可以通过将
{$1=a[$1]}1
更改为
$1=a[$1]
来缩短一些,这是非常正确的,@Jotne,而且更清晰。刚刚更新,非常感谢。