考虑一下我是否有以下情况:
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"