Добавление текста из файла в текст в другом файле - PullRequest
3 голосов
/ 29 марта 2011

У меня есть два отдельных текстовых файла, один с 4-буквенными словами и один с 4-значными числами, все в отдельных строках.Слова в файле on соответствуют номерам на той же строке в другом файле.Например:

CATS
RATS
HATS

совпадает с

2287
7287
4287

Что яхотелось бы добавить цифры в конец их соответствующего слова, чтобы оно выглядело так:

CATS2287
RATS7287
HATS4287

, что у меня так:

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

но проблема в том, что а) он не печатает / выводит эхо в новый файл, и б) он перебирает каждое слово каждый раз, когда первый цикл приходит к новому номеру, поэтому в конце концов,все слова соединяются с последним номером в числовом файле.Заранее спасибо за помощь.

Ответы [ 5 ]

2 голосов
/ 29 марта 2011

Вы можете использовать отличную маленькую утилиту paste(1):

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

-d указывает список разделителей;Я дал ему пустой список: без разделителей, без разделителей.

2 голосов
/ 29 марта 2011
paste -d "" /path/to/letters /path/to/numbers

Подтверждение концепции

$ paste -d "" CATS NUMS
CATS2287
RATS7287
HATS4287
1 голос
/ 29 марта 2011

В Mac OS X:

paste -d "\0" <(echo abc) <(echo def)
1 голос
/ 29 марта 2011

Хм, моя версия пасты с -d"" просто приводит к числам, слова перезаписываются (GNU paste 8.10 на cygwin).мои входные файлы не имеют возврата каретки.

paste words numbers | tr -d '\t'

Кроме того, только с встроенными оболочками

exec 3<words
exec 4<numbers
while read -u3 word; do
  read -u4 num
  echo $word$num
done
exec 3<&-
exec 4<&-
0 голосов
/ 29 марта 2011

Есть несколько способов сделать это

Вставить:

paste -d "" file1 file2

awk

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

Bash:

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

Ruby(1,9 +)

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