使用AWK中的第一个字段作为文件名

时间:2014-02-04 14:48:12

标签: bash awk corpus

数据集是一个包含三列的大文件:一个部分的ID,一些不相关的内容和一行文本。示例可能如下所示:

A01 001 This is a simple test.
A01 002 Just for exemplary purpose.
A01 003
A02 001 This is another text

我想使用第一列(在此示例中为A01和A02,代表不同的文本)作为文件名,其内容是第二列之后该行中的所有内容。

上面的示例应该会生成两个文件,一个名称为A01,内容为:

This is a simple test.
Just for exemplary purpose.

另一个A02,内容为:

This is another text

我的问题是:

  1. AWK是否适合执行此任务?或者也许有更方便的方法呢?
  2. 这项任务将如何完成?

2 个答案:

答案 0 :(得分:7)

awk非常适合这类任务。如果你不介意有一些前导空格,你可以使用:

awk '{f=$1; $1=$2=""; print > f}' file

这将清空第一个和第二个字段,然后将所有行打印到f文件中,该文件先前存储为第一个字段。

如果这些空间有困扰,您可以使用sub(" ", "")删除它们:

awk '{f=$1; $1=$2=""; sub("  ", ""); print > f}' file

答案 1 :(得分:2)

Bash也会奏效。如果这是一个问题,可能比awk慢。

while read -r id num line; do
    [[ $line ]] && echo "$line" >> $id
done < file