从命令行将多个文件中的列提取到单个输出文件中

时间:2014-10-13 14:50:57

标签: linux command-line awk

假设我有一个包含10列的制表符分隔数据文件。使用awk,例如,很容易提取第7列,并将其输出到单独的文件中。 (例如,请参阅this question。)

如果我有5个这样的数据文件怎么办?我想从每个数据文件中提取第7列并创建一个包含5个数据列的新文件,每个输入文件的第7列一个?可以使用awk和其他命令从命令行完成吗?

或者我应该编写一个Python脚本来处理它?<​​/ p>

2 个答案:

答案 0 :(得分:1)

awk '{a[FNR] = a[FNR]" " $7}END{for(i=0;i<FNR;i++) print a[i]}'

a数组保存来自不同文件的每一行

FNR当前输入文件中读取的记录数,在每个文件开头设置为零。

END{for(i=0;i<FNR;i++) print a[i]}在文件a上打印数组END的内容

答案 1 :(得分:0)

如果数据足够小以便将其全部存储在内存中,那么这应该可行:

awk '{out[FNR]=out[FNR] (out[FNR]?OFS:"") $7; max=(FNR>max)?FNR:max} END {for (i=1; i<=max; i++) {print out[i]}}' file1 file2 file3 file4 file5

如果不是那么你需要一些更高级的东西可以寻找文件流或从多个文件中读取单行(一个带有N个read调用的shell循环可以这样做。)