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"

관련 정보