从 csv 提取信息到多个文件

从 csv 提取信息到多个文件

我需要一些帮助来从 CSV 文件中提取和分离信息字符串,然后将其打印为多个新文件。

我有大量文件,其中有大量需要分开的信息。该代码需要将阿拉巴马州的所有信息分组到一个新文件中,并将俄克拉荷马州的信息分组到一个单独的文件中。使用 Bash ( .sh)可以一步实现吗?

1 Sample; Region; Name; Result;
2 "99"; "Alabama", "Joe"; "Ill"
3 "100"; "Alabama", "Mary", "Ill"
4 "101", "Oklahoma", "Joseph", "Ill"

在这种情况下,它将写入 2 个输出文件,一个包含阿拉巴马州的所有行,另一个包含俄克拉荷马州的所有行。是否可以进一步发送这些文件以使用 7zip 进行加密?

答案1

像这样的东西应该有效。

您可以使用awk它来分离和创建文件,然后p7zip进行加密。

for f in file; do
    awk ' /Alabama/ { print > "Alamaba.txt" } /Oklahoma/ { print > "Oklahoma.txt" }' $f
    7z a -p -mx=9 -mhe -t7z states.7z Alabama.txt Oklahoma.txt
    #7z a -p -mx=9 -mhe -t7z Alabama.7z Alabama.txt
    #7z a -p -mx=9 -mhe -t7z Oklahoma.7z Oklahoma.txt
done

awk将匹配并直接打印到输出文件。

p7zip7z在本例中将创建一个名为 states.7z 的加密文件

-a: Add files to archive

-p: Prompt for a password

-mx=9: Compression level

-mhe: Encrypt file names

-t7z: Generate a 7z archive 

要恢复数据,请使用:

7za e states.7z

输出

cat Alamaba.txt
2 "99"; "Alabama", "Joe"; "Ill"
3 "100"; "Alabama", "Mary", "Ill"

cat Oklahoma.txt
4 "101", "Oklahoma", "Joseph", "Ill"

答案2

好吧,假设所有字段都用一个空格分隔,您可以尝试以下操作:

while read SAMPLE REGION REST; do OUT=$(sed s/'[",;]'//g <<<$REGION);echo "$SAMPLE $REGION $REST" >>$OUT.csv; done < all.csv

如果字段之间没有空格,您可以使用 IFS= 更改内部字段分隔符,如下例:

while IFS="," read SAMPLE REGION REST; do OUT=$(sed s/'[",;]'//g <<<$REGION);echo "$SAMPLE $REGION $REST" >>$OUT.csv; done < all.csv

标题行属于一个单独的文件,您必须自己复制。

相关内容