【发布时间】:2014-07-29 14:05:51
【问题描述】:
我目前正在执行以下命令:
awk 'BEGIN { FS="," ; getline ; H=$0 } N != $3 { N=$3 ; print H > "/Directory/FILE_"$3"_DOWNLOAD.csv" } { print > "/Directory/FILE_"$3"_DOWNLOAD.csv" }' /Directory/FILE_ALL_DOWNLOAD.csv
这会从 CSV 文件中的第三个位置获取值,并为每个不同的 $3 值创建一个 CSV。按需要工作。
输入文件如下:
Name, Amount, ID
"ABC", "100.00", "0000001"
"DEF", "50.00", "0000001"
"GHI", "25.00", "0000002"
不幸的是,我无法控制源 (CSV) 表中的值,即 $3 值,但我想从中删除特殊(非字母数字)字符。我尝试了以下方法来完成此操作,但失败了...
awk 'BEGIN { FS="," ; getline ; H=$0 } N != $3 { N=$3 ; name=${$3//[^a-zA-Z_0-9]/}; print H > "/Directory/FILE_"$name"_DOWNLOAD.csv" } { print > "/Directory/FILE_"$name"_DOWNLOAD.csv" }' /Directory/FILE_ALL_DOWNLOAD.csv
建议?我希望在一个命令中执行此操作,但如果有人有一个可行的 bash 脚本答案。
【问题讨论】:
-
源文件中的示例记录:“123.”、“公司名称”“456.”生成一个文件 /Directory/FILE_" 456."_DOWNLOAD.csv - 我正在寻找 /Directory/FILE_456_DOWNLOAD.csv -- 谢谢。
-
编辑您的问题并从文件中添加几行会很有用。
-
我很好奇 - 你从哪里得到
name=${$3//[^a-zA-Z_0-9]/}语法的想法? -
@Ed 在我看来像是 awk 字段上的 bash 替换的混合体。
-
哦,我明白了 - 如果这是 bash 并且 $3 是 bash 变量.... 明白了,谢谢。