如何解决将文件内容复制到其他位置
我有一个文本文件,其中包含一个函数的输出结果(路径行,位于结果的正下方),并且我只想将每个路径行下面提到的结果复制到name =。中提到的文件中。 ..并要粘贴到文件的最后一列
我的数据保存在list.txt中
<_io.TextIOWrapper name='/home/liu/datalist/20180603_190202_5.0_38_CD.txt' mode='r' encoding='UTF-8'>
0.9821305886510053
0.9822639336394542
0.9820650754926169
0.9826369946635649
0.983048680372995
<_io.TextIOWrapper name='/home/liu/datalist/20150603_190202_12.0_36_CD.txt' mode='r' encoding='UTF-8'>
0.984263067046808
0.9821305886510053
0.9822639336394542
0.9820650754926169
0.9826369946635649
0.983048680372995
<_io.TextIOWrapper name='/home/liu/datalist/20120603_190202_9.0_35_CD.txt' mode='r' encoding='UTF-8'>
0.984263067046808
0.982871209110385
0.9830143471771022
0.9860952410409616
0.9897257569597108
<_io.TextIOWrapper name='/home/liu/datalist/20100603_190202_125.0_36_CD.txt' mode='r' encoding='UTF-8'>
0.9860794488788789
0.9838808626335948
0.9829656043793615
0.9868238026934462
0.9972756725839034
0.9882482212913676
<_io.TextIOWrapper name='/home/liu/datalist/20240603_190202_265.0_36_CD.txt' mode='r' encoding='UTF-8'>
0.9856758910581078
0.9849158515561436
0.9838016078370099
0.9854127382758501
0.9880763165814402
我尝试了以下代码:对此没有正确的想法。希望有些专家能帮助我。谢谢
#!/bin/sh
for file in `list.txt`
cp cat|list.txt > name
详细说明: 假设我们考虑20180603_190202_5.0_38_CD.txt文件。此命名文件已经存在于/ home / liu / datalist目录中,并且包含类似
的文件1 2 3 4 5
5 6 7 8 9
3 4 5 6 7
3 4 5 6 7
4 5 6 7 8
我希望文件如下所示
1 2 3 4 5 0.9821305886510053
5 6 7 8 9 0.9822639336394542
3 4 5 6 7 0.9820650754926169
3 4 5 6 7 0.9826369946635649
4 5 6 7 8 0.983048680372995
解决方法
编辑:新代码,修复了旧的丑陋代码:D
结果
$ cat 20150603_190202_12.0_36_CD.txt
1 2 3 4 5
5 6 7 8 9
3 4 5 6 7
3 4 5 6 7
4 5 6 7 8
$ cat 20180603_190202_5.0_38_CD.txt
1 2 3 4 5
5 6 7 8 9
3 4 5 6 7
3 4 5 6 7
4 5 6 7 8
$ ./test.sh
$ cat 20150603_190202_12.0_36_CD.txt
1 2 3 4 5 0.984263067046808
5 6 7 8 9 0.9821305886510053
3 4 5 6 7 0.9822639336394542
3 4 5 6 7 0.9820650754926169
4 5 6 7 8 0.9826369946635649
$ cat 20180603_190202_5.0_38_CD.txt
1 2 3 4 5 0.9821305886510053
5 6 7 8 9 0.9822639336394542
3 4 5 6 7 0.9820650754926169
3 4 5 6 7 0.9826369946635649
4 5 6 7 8 0.983048680372995
代码
$ cat test.sh
#!/bin/bash
cat list.txt | cut -d '/' -f5- | sed "s/' mode='r' encoding='UTF-8'>//" > new_list.txt
while read -r line
do
if [[ "$line" =~ ".txt" ]]; then
count=0
filename="$line"
touch "$filename"
else
count=$(($count+1))
originalline=$(sed -n ${count}p "$filename")
sed -i "0,/^$originalline\$/s//$originalline $line/" "$filename"
fi
done < "new_list.txt"
rm new_list.txt
,
另一种使用关联数组的解决方案:
export const MyComponent: React.FunctionComponent = () => {
const divRef = useRef<HTMLDivElement | null>(null);
const doSomethingWithRef = (): void => {
// This is my uncertainty:
// Can this ever be called AFTER unmount has happened,so that divRef.current is null?
console.log(["divRef",divRef.current]);
};
const handleWindowResizeEvent = (): void => {
window.requestAnimationFrame(() => {
doSomethingWithRef();
});
};
useEffect(
() => {
window.addEventListender("resize",handleWindowResizeEvent);
// componentWillUnmount
return (): void => {
window.removeEventListender("resize",handleWindowResizeEvent);
};
},[] // componentDidMount
};
return <div ref={divRef}>Hello,World!</div>;
};
编辑:忘记了这一点,但是以防万一,在不再需要#!/bin/bash
declare -A filetemp
while read -r line
do
if [[ $line =~ "name='"(.*?.txt) ]]
then
name="${BASH_REMATCH[1]}"
filetemp[$name]=$(mktemp)
else
[ -n "$name" ] && echo "$line" >> "${filetemp[$name]}"
fi
done < list.txt
for name in "${!filetemp[@]}"
do
paste -d ' ' "$name" "${filetemp[$name]}" > "${name}.tmp"
mv -f "${name}.tmp" "$name"
done
创建的临时文件后,清理它们是一个好主意:
mktemp
编辑2:如@lucasgvarela所指出的那样,当触发for name in "${!filetemp[@]}"
do
tempfile="${filetemp[$name]}"
paste -d ' ' "$name" "$tempfile" > "${name}.tmp"
mv -f "${name}.tmp" "$name"
rm -f "$tempfile"
done
信号时,trap
命令可能是删除临时文件的更优雅的方式:
EXIT
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。