首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用shell脚本读取2个文件并将内容写入另一个文件

如何使用shell脚本读取2个文件并将内容写入另一个文件
EN

Stack Overflow用户
提问于 2022-11-04 13:41:36
回答 2查看 43关注 0票数 0

我有两个像这样的文件。

档案-A

代码语言:javascript
复制
Red 
Green 
Blue
Yellow

档案-B

代码语言:javascript
复制
Car
Bus 
Van
Bike

我必须按照file-C定义的变量编写它们的内容。(每次文件-A和文件-B行数相等)

预期产出:

代码语言:javascript
复制
Red Car
Green Bus Green
Blue Blue Blue
Yellow

这就是我试过的(我必须这样做)

代码语言:javascript
复制
mycolor="file-A"
myvehicle=$(cat file-B)

while read -r color
do

  for vehicle in $myvehicle
  do
  
    echo $color $vehicle
    echo $color $vehicle $color
    echo $color $color $color
    echo $color 

    
  done 
     
done <$mycolor > file-C

然后我得到了输出

代码语言:javascript
复制
Red Car
Red Car Red
Red Red Red
Red
Red Bus
Red Bus Red
Red Red Red
Red
Red Van
Red Van Red
Red Red Red
Red
Red Bike
Red Bike Red
Red Red Red
Red
Green Car
Green Car Green
Green Green Green
Green
Green Bus
Green Bus Green
Green Green Green
Green
Green Van
Green Van Green
Green Green Green
Green
Green Bike
Green Bike Green
Green Green Green
Green
Blue Car
Blue Car Blue
Blue Blue Blue
Blue
Blue Bus
Blue Bus Blue
Blue Blue Blue
Blue
Blue Van
Blue Van Blue
Blue Blue Blue
Blue
Blue Bike
Blue Bike Blue
Blue Blue Blue
Blue
Yellow Car
Yellow Car Yellow
Yellow Yellow Yellow
Yellow
Yellow Bus
Yellow Bus Yellow
Yellow Yellow Yellow
Yellow
Yellow Van
Yellow Van Yellow
Yellow Yellow Yellow
Yellow
Yellow Bike
Yellow Bike Yellow
Yellow Yellow Yellow
Yellow

有人能帮我弄清楚这个吗?提前感谢!

注意:我不允许使用jq或其他语言如JavaScript、Python等。

EN

回答 2

Stack Overflow用户

发布于 2022-11-04 14:42:46

我将利用GNU AWK来完成以下任务,让file1.txt内容成为

代码语言:javascript
复制
Red 
Green 
Blue
Yellow

file2.txt含量是

代码语言:javascript
复制
Car
Bus 
Van
Bike

然后

代码语言:javascript
复制
awk 'FNR==NR{arr[FNR]=$1;next}FNR==1{print arr[1],$1}FNR==2{print arr[2],$1,arr[2]}FNR==3{print arr[3],arr[3],arr[3]}FNR==4{print arr[4]}' file1.txt file2.txt

给予输出

代码语言:javascript
复制
Red Car
Green Bus Green
Blue Blue Blue
Yellow

说明:FNR是已处理文件中的行数,NR是全局行数,因此模式FNR==NR的操作仅适用于第一个冲压文件。在处理第一个文件时,我只需填充数组arr,这样键就是行数,值是第一个字段,而且由于我不想要其他任何东西,所以我指示GNU AWK转到next行。根据行数处理进一步打印的文件时,使用与行数相同的键从数组arr中检索颜色。

(用GNU Awk 4.0.0测试)

票数 0
EN

Stack Overflow用户

发布于 2022-11-05 07:20:19

代码语言:javascript
复制
$ paste -d' ' file-A file-B
Red Car
Green Bus
Blue Van
Yellow Bike

但是,如果您坚持使用bash变量:

代码语言:javascript
复制
$ paste file-A file-B | while read -r a b; do printf '%s %s\n' "$a" "$b"; done
Red Car
Green Bus
Blue Van
Yellow Bike

或者:

代码语言:javascript
复制
$ mapfile -t a < file-A
$ mapfile -t b < file-B
$ for (( i=0; i<${#a[@]}; i++ )); do printf '%s %s\n' "${a[i]}" "${b[i]}"; done
Red Car
Green Bus
Blue Van
Yellow Bike
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74317970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档