Files

使用linux將內容從一個文件粘貼到另一個文件

  • November 11, 2022

考慮我是否有以下內容:

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 本身中

o/p:

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

o/p:

f1.txt

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

我處理它的方法是使用一個簡單的循環來讀取每個條目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"

引用自:https://unix.stackexchange.com/questions/724453