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

