AWK命令从列中提取不同的值

AWK命令从列中提取不同的值,awk,Awk,从制表符分隔的文件。我试图根据第4列中的唯一值提取所有行,然后将其另存为CSV。但是,我想提取第4列中所有不同的值,并一次性将它们保存为CSV 我可以使用以下命令提取一个值: awk -F $'\t' '$4 == "\"C333\"" {print}' dataFile > C333.csv 让我们考虑这个测试文件: $ cat in.csv a b c d aa bb cc d 1 2 3

从制表符分隔的文件。我试图根据第4列中的唯一值提取所有行,然后将其另存为CSV。但是,我想提取第4列中所有不同的值,并一次性将它们保存为CSV

我可以使用以下命令提取一个值:

awk -F $'\t' '$4 == "\"C333\"" {print}' dataFile > C333.csv

让我们考虑这个测试文件:

$ cat in.csv
a       b       c       d
aa      bb      cc      d
1       2       3       4
12      23      34      4
A       B       C       d
现在,让我们将每一行写入以第四列命名的制表符分隔的输出文件:

$ awk -F'\t' '{f=$4".csv"; print>>f; close(f)}' OFS='\t' in.csv
$ cat d.csv
a       b       c       d
aa      bb      cc      d
A       B       C       d
$ cat 4.csv
1       2       3       4
12      23      34      4

让我们考虑这个测试文件:

$ cat in.csv
a       b       c       d
aa      bb      cc      d
1       2       3       4
12      23      34      4
A       B       C       d
现在,让我们将每一行写入以第四列命名的制表符分隔的输出文件:

$ awk -F'\t' '{f=$4".csv"; print>>f; close(f)}' OFS='\t' in.csv
$ cat d.csv
a       b       c       d
aa      bb      cc      d
A       B       C       d
$ cat 4.csv
1       2       3       4
12      23      34      4

但这会在打印每一行后关闭文件。关闭
END
块中的文件不是更有效吗?在将awk程序应用于源数据文件之前,可以先对第四个字段中的源数据文件进行排序。@user000001这将是有效的,但不可靠。对于大的输入文件,很容易达到打开文件数量的限制。因为我让OPs在对真实数据测试代码时报告了这个问题,所以我倾向于选择可靠性而不是速度。@JamesBrown是的,排序是避免重复打开和关闭文件的一种方法。但这会在打印每一行后关闭文件。关闭
END
块中的文件不是更有效吗?在将awk程序应用于源数据文件之前,可以先对第四个字段中的源数据文件进行排序。@user000001这将是有效的,但不可靠。对于大的输入文件,很容易达到打开文件数量的限制。因为我让OPs在对真实数据测试代码时报告了这个问题,所以我倾向于选择可靠性而不是速度。@JamesBrown是的,排序将是避免重复打开和关闭文件问题的一种方法。噢,哇,这是第16000个
awk
标记问题!哇,这是第16000个
awk
标记问题!