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

Ubuntu命令行提取多文件前4列并分别输出至新文件的问题

解决方法:将每个文件的前4列单独输出到对应新文件

嘿,我来帮你搞定这个问题~你之前的命令把所有输出都合并到一个文件,是因为shell的重定向>是把整个awk命令的所有输出都写到同一个文件里,不管awk处理多少个输入文件。下面给你两种简单的解决办法:

方法一:用Shell循环逐个处理文件

这种方法直观易懂,适合新手操作:

for file in File_*.txt; do
    # 提取当前文件的前4列,输出到以Part_开头的对应文件
    awk '{print $1, $2, $3, $4}' "$file" > "Part_${file}"
done

比如原文件是File_01.txt,处理后会生成Part_File_01.txt,完美对应每个输入文件。

方法二:用awk内置变量直接生成对应输出文件

如果不想写shell循环,可以直接用awk的内置变量FILENAME(代表当前正在处理的文件名)来指定输出文件:

awk '{print $1, $2, $3, $4 > "Part_" FILENAME}' File_*.txt

如果你的文件数量较多(比如30个),部分awk版本可能会遇到“打开文件过多”的报错,这时候可以加上ENDFILE块自动关闭每个输出文件(Ubuntu默认的awk就是gawk,支持这个特性):

awk '{
    print $1, $2, $3, $4 > "Part_" FILENAME
}
ENDFILE {
    # 每个文件处理完成后关闭对应的输出文件,避免打开过多文件
    close("Part_" FILENAME)
}' File_*.txt

这两种方法都能让你得到30个分别对应原文件的、仅包含前4列数据的新文件~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:26:05