将文本中的文本附加到另一个文件中的文本

时间:2011-03-29 01:06:23

标签: bash terminal sh

我有两个单独的文本文件,一个包含4个字母的单词,另一个包含4位数字,所有这些都在各行上。文件中的单词对应于另一个文件中同一行的数字。例如:

CATS
大鼠
HATS

匹配

2287
7287
4287

我想要的是将数字附加到匹配单词的末尾,所以它看起来像这样:

CATS2287
RATS7287
HATS4287

到目前为止我所拥有的是:

for i in $(cat numbers); do  
  sed 's/$/'$i'/' words;
done

但问题是a)没有打印/回显到新文件而b)每次第一个循环到达一个新数字时它会遍历每个单词,所以最后所有的单词都配对了使用数字文件中的最后一个数字。在此先感谢您的帮助。

5 个答案:

答案 0 :(得分:2)

paste -d "" /path/to/letters /path/to/numbers

概念证明

$ paste -d "" CATS NUMS
CATS2287
RATS7287
HATS4287

答案 1 :(得分:2)

您可以使用优秀的小paste(1)实用程序:

$ cat a
CATS
RATS
HATS
$ cat b
2287
7287
4287
$ paste -d "" a b
CATS2287
RATS7287
HATS4287
$ 

-d指定分隔符列表;我给了它一个空白列表:没有分隔符,没有分隔符。

答案 2 :(得分:1)

嗯,我的-d""粘贴版本只会产生数字,这些字会被覆盖(在cygwin上的GNU粘贴8.10)。我的输入文件没有回车。

paste words numbers | tr -d '\t'

另外,只使用shell builtins

exec 3<words
exec 4<numbers
while read -u3 word; do
  read -u4 num
  echo $word$num
done
exec 3<&-
exec 4<&-

答案 3 :(得分:1)

在Mac OS X上:

paste -d "\0" <(echo abc) <(echo def)

答案 4 :(得分:0)

有几种方法可以做到这一点

粘贴:

paste -d "" file1 file2

AWK

awk '{ getline f<"file2" ; print $0f}' file1

击:

exec 6<"file2"
while read -r line
do
    read -r S <&6
    printf "${line}${S}\n"
done <"file1"
exec >&6-

红宝石(1.9 +)

ruby -ne 'BEGIN{f=File.open("file1")};print $_.chomp+f.readline;END{f.close}' file