从大数据文件中提取/复制列范围

AiB*_*AiB 2 awk text-processing

我试图通过提取列并粘贴到一个新文件中来从一个大文件中准备数据文件。

给定数据的列数非常大。我想通过拆分数据来准备多个数据文件。
我正在尝试下面的脚本,但它不起作用。我预计错误是由于指定了要复制的列范围。

#!/bin/bash

paste <(awk '{print $1,$2,$3,...$19,$20}' Precipitation.csv ) > aaaaa1
paste <(awk '{print $21,$22,$23,...$39,$40}' Precipitation.csv ) > aaaaa2 
paste <(awk '{print $41,$42,$43,...$99,$100}' Precipitation.csv ) > aaaaa3 
Run Code Online (Sandbox Code Playgroud)

你能帮我更正代码吗?

Mic*_*mer 5

这看起来像一个cutawk以下更好的情况:

cut -d , -f1-20 Precipitation.csv > aaa1
cut -d , -f21-40 Precipitation.csv > aaa2
cut -d , -f41-100 Precipitation.csv > aaa3
Run Code Online (Sandbox Code Playgroud)

-d ,指定分隔符(逗号,因为输入称为 CSV,但您可以更改它)。通过inclusive-f N-M选择字段在输出中。如果任何字段中有嵌入的逗号,它就会中断 - 在这种情况下,您可能需要一个真正的 CSV 解析器,尽管如果真的不可能,也可以将某些东西组合在一起。NM

输出将使用与输入相同的分隔符。GNUcut支持--output-delimiter=STRING设置不同分隔符的选项,但我认为其他人不支持。FreeBSDcut包括一个-w按空格分割的选项,它更接近awk默认情况下的功能。如果您想在其他地方使用其中一种行为,那么在之前/之后转换分隔符可能是您最好的选择。