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)は、1行のデータのみを含む別々のファイルです。

重複した質問の場合は、解決するようご案内ください。

コードを試してみました。

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"

おすすめ記事