AWK命令从列中提取不同的值
从制表符分隔的文件。我试图根据第4列中的唯一值提取所有行,然后将其另存为CSV。但是,我想提取第4列中所有不同的值,并一次性将它们保存为CSV 我可以使用以下命令提取一个值: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
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
标记问题!