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

发布于 2024-10-27 16:24:50 字数 440 浏览 5 评论 0原文

我有两个单独的文本文件,一个包含 4 个字母的单词,另一个包含 4 位数字,全部位于单独的行中。一个文件中的单词与另一个文件中同一行的数字相对应。例如:


老鼠
HATS

匹配

2287
7287
第4287章

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

CATS2287
RATS7287
HATS4287

到目前为止,我所拥有的

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

是这样的:但问题是 a) 不会打印/回显到新文件,b) 每次第一个循环到达新数字时它都会循环遍历每个单词,所以最后,所有单词都与数字文件中的最后一个数字配对。预先感谢您的帮助。

I have two separate text files, one with 4 letter words and one with 4 digit numbers, all on individual lines. The words in the on file correspond to the numbers on the same line in the other file. For example:

CATS
RATS
HATS

matches up with

2287
7287
4287

What I would like is to append the numbers to the end of their matching word, so it looks like this:

CATS2287
RATS7287
HATS4287

so far what I have is this:

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

but the problem is a) that doesn't print/echo out to a new file and b) it loops through each word every time the first loop comes to a new number so in the end, all the words are paired up with the last number in the number file. Thanks in advance for the help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

千柳 2024-11-03 16:24:50
paste -d "" /path/to/letters /path/to/numbers

概念验证

$ paste -d "" CATS NUMS
CATS2287
RATS7287
HATS4287
paste -d "" /path/to/letters /path/to/numbers

Proof of Concept

$ paste -d "" CATS NUMS
CATS2287
RATS7287
HATS4287
最单纯的乌龟 2024-11-03 16:24:50

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

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

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

You can use the excellent little paste(1) utility:

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

-d specifies a list of delimiters; I gave it a blank list: no delimiters, no delimiters.

白首有我共你 2024-11-03 16:24:50

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

paste words numbers | tr -d '\t'

另外,仅使用 shell 内置函数

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

Hmm, my version of paste with -d"" just results in numbers, the words get overwritten (GNU paste 8.10 on cygwin). my input files have no carriage returns.

paste words numbers | tr -d '\t'

Also, just with shell builtins

exec 3<words
exec 4<numbers
while read -u3 word; do
  read -u4 num
  echo $word$num
done
exec 3<&-
exec 4<&-
小猫一只 2024-11-03 16:24:50

在 Mac OS X 上:

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

On Mac OS X:

paste -d "\0" <(echo abc) <(echo def)
囚我心虐我身 2024-11-03 16:24:50

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

粘贴:

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

there are a few ways to do that

Paste:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文