我需要一些帮助来从 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
将匹配并直接打印到输出文件。
p7zip
7z
在本例中将创建一个名为 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
标题行属于一个单独的文件,您必须自己复制。