You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本批量删除文件末尾162行并顺序重命名问题

批量删文件末尾行+顺序重命名的解决方案

先解决tac找不到的问题,搞定删末尾162行

你原来的命令里do后面多了个多余的|,而且tac不是所有环境都自带,换用更通用的方法:

方法1:用awk直接处理(推荐)

for i in RMSF_CA_proA_*; do
  awk -v lines=162 'NR == 1 {total = NR} END {total = NR} NR <= total - lines' "$i" > tmp && mv tmp "$i"
done

这个命令会自动计算每个文件的总行数,只保留前「总行数-162」行,不用倒序操作,兼容性更好。

方法2:用wc+head组合

先计算总行数,再截取掉后面162行,还能加判断避免行数不足的情况:

for i in RMSF_CA_proA_*; do
  total_lines=$(wc -l < "$i")
  keep_lines=$((total_lines - 162))
  if [ "$keep_lines" -gt 0 ]; then
    head -n "$keep_lines" "$i" > tmp && mv tmp "$i"
  else
    echo "$i 行数不够162,跳过删行"
  fi
done

新增顺序重命名功能

在循环里加个计数器,就能按顺序给文件改名,比如改成RMSF_CA_proA_001这种编号格式:

count=1
for i in RMSF_CA_proA_*; do
  # 先执行删行操作,这里复用上面的wc+head方法
  total_lines=$(wc -l < "$i")
  keep_lines=$((total_lines - 162))
  if [ "$keep_lines" -gt 0 ]; then
    head -n "$keep_lines" "$i" > tmp && mv tmp "$i"
  else
    echo "$i 行数不够162,跳过删行"
  fi
  
  # 生成带序号的新文件名,%03d表示3位补零的序号(如001、002)
  new_name=$(printf "RMSF_CA_proA_%03d" "$count")
  # 如果原文件有后缀(比如.txt),想要保留后缀就用下面这行替换上面的new_name
  # new_name=$(printf "RMSF_CA_proA_%03d.%s" "$count" "${i##*.}")
  mv "$i" "$new_name"
  count=$((count + 1))
done

注意事项

  • 操作前一定要备份文件,避免误操作导致数据丢失
  • 如果文件名包含空格,上面的脚本已经用双引号包裹变量,不用担心出错

内容的提问来源于stack exchange,提问作者Prathit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:15:31