使用linux将一个文件的内容粘贴到另一个文件

使用linux将一个文件的内容粘贴到另一个文件

考虑一下我是否有以下情况:

cat /home/r1/f1.txt
sch1.t1
sch2.t2
sch2.t3
sch1.t4

我也有文件


cat /home/r2/sch1.t1.txt
data

cat /home/r2/sch2.t2.txt
data1

我需要将 f1.txt 中的 sch1.t1 与另一个目录(sch1.t1,.txt)中存在的文件进行匹配,并将以下内容粘贴到 f1.txt 本身中

输出:

f1.txt

sch1.t1 data
sch2.t2 data1

我只有 f1.txt,并且可能有很多 sch(1..n).t(1..n)。每个 sch(1..n).t(1..n) 都是单独的文件,只有一行数据。

如果这是一个重复的问题,请指导我解决它。

尝试过代码。

while read line
    do  
        paste f1.txt <(cut -f2 /home/r2/$line.txt) >> out_file.txt
        mv out_file.txt /home/r1/f1.txt
        
    done <  /home/r1/f1.txt

谢谢回复。更新的问题。考虑文件是否为空(Sch1.t4.txt)。在哪里包含该代码段)

for file in /*.txt; 
    do 
        if [ ! -s $file ]; then 
            echo "NA"> $file; 
        fi; 
    done

输出:

f1.txt

sch1.t1 data
sch2.t2 data1
sch1.t4 NA

答案1

我处理它的方法是使用一个简单的循环读取每个条目f1.txt并使用它来构建结果文件。完成后,您可以f1.txt根据需要覆盖原始文件

#!/bin/sh
ctrl=/home/r1
base=/home/r2

# Loop across each entry
while IFS= read -r name
do
    # Derive filename
    file="$base/$name.txt"

    # Fix up if it doesn't already exist (or is zero length)
    [ ! -s "$file" ] && printf '%s\n' 'NA' >"$file"

    # Record what we've got
    printf '%s %s\n' "$name" "$(xargs <"$file")"

done <"$ctrl/f1.txt" >"$ctrl/f1.out"

# Replace the original file, saving it
[ ! -f "$ctrl/f1.old" ] && mv -f "$ctrl/f1.txt" "$ctrl/f1.old"
mv -f "$ctrl/f1.out" "$ctrl/f1.txt"

相关内容