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
相关产品推荐
相关产品推荐

