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

Docker容器Bash环境下移除TSV文件最后2列时第5列数据丢失问题求助

Docker容器Bash环境下移除TSV文件最后2列时第5列数据丢失问题求助

我现在在Mac上通过Docker容器的终端用Bash写代码,遇到个棘手的问题:我手头有个共7列的TSV文件,工作中只需要前5列,得把最后2列删掉。

我尝试用awk来实现,用NF = NF - 2的方式确实能移除最后2列,但奇怪的是,我需要保留的第5列的数据竟然丢失了一部分随机条目——相当于目标达成了一半,但额外搞坏了有用的数据,这可太闹心了。

先说说我写的代码,我封装了一个preprocess函数:

preprocess() {
    input_file="$1"

    # Extract the base name of the input file
    base_name=$(basename "$input_file" .tsv)

    # Create the new output file name
    output_file="${base_name}_clean.tsv"

    awk -F'\t' 'BEGIN{OFS=FS}
    {
        NF = NF - 2

        print
    }' "$input_file" > "$output_file"
}

函数里还加了文件存在检查之类的逻辑,应该不会影响这个删列的操作。

补充一下后续的细节:原本我还在处理月份和年份相关的列,后来我把那部分代码删掉,先聚焦在简化数据的问题上。现在的情况是:

  • 第一张图是原始数据文件
  • 第二张图是当前代码执行后的结果,能看到它不仅删了最后2列,还删掉了第5列里的一些随机条目
  • 第三张图是我期望得到的最终结果

想请教各位大佬,为什么用NF = NF -2会影响前面的列?有没有什么办法能准确移除TSV文件的最后2列,同时完整保留前5列的所有数据?

备注:内容来源于stack exchange,提问作者Spoku

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 12:34:41