如何用Bash实现从文本文件随机移动指定行数至另一文件?
解决随机行数移动与同步删除的问题
核心问题是你两次调用shuf生成了不同的随机值,导致移动和删除的行数不匹配。只需要生成一次随机数并存储到变量,后续操作复用这个变量即可解决问题。
具体实现步骤
- 先生成范围3-6的随机数并保存到变量
X:X=$(shuf -i 3-6 -n1) - 将
firstfile.txt的前X行写入combine.txt(如果是覆盖原有内容用>,如果是追加到文件末尾用>>):head -$X firstfile.txt >> combine.txt - 删除
firstfile.txt的前X行,这里有两种等价写法:- 直接指定行范围1到
X:sed -i "1,${X}d" firstfile.txt - 沿用你原来的
1,+N格式(N = X-1):sed -i "1,+$(($X-1))d" firstfile.txt
- 直接指定行范围1到
注意事项
- 如果是在macOS系统上使用
sed,-i参数需要指定备份后缀(比如-i.bak),执行后会生成带.bak的备份文件,不需要的话可以后续删除:sed -i.bak "1,${X}d" firstfile.txt && rm firstfile.txt.bak
内容的提问来源于stack exchange,提问作者user2406786
相关产品推荐
相关产品推荐

