我需要使用 bash 修改 csv 文件。
输入(csv 文件):
firstletter="s"
surname="houston"
emaildomain"@zzz.com"
input=$(cat 1.csv)
1.csv:
1,1,Susan houston,Director of Services,,
2,1,Christina Gonzalez,Director,,
3,2,Brenda brown,"Director, Second Career Services",,
如何使用 Linux bash 在最后两个逗号之间添加文本?我尝试了以下方法:
for i in $(cat $input);do
sed -i "s/,$/${firstletter}${surname}${emaildomain},/g" $i;
done
但是,这会导致错误:
sed: -e expression #1, char 5: unterminated `s' command
预期输出:
1,1,Susan houston,Director of Services,[email protected],
2,1,Christina Gonzalez,Director,[email protected],
3,2,Brenda brown,"Director, Second Career Services",[email protected],
问题不清楚,但我认为这可能是您想要做的,使用 GNU awk 进行“就地”编辑和
gensub()
:有关使用 awk 处理 CSV 的更多信息,请参阅使用 awk高效解析 CSV 的最可靠方法是什么? 。
我确信有一些聪明的方法
sed
可以实现你的愿望,我个人建议使用 GNU awk。-i inplace
是一个 GNU 扩展,允许 awk 模拟sed
s-i
。该
BEGIN
部分告诉 awk 输入和输出字段分隔符都是逗号。fn=gensub(...)
提取名字的首字母(全名是第三个字段,$3
)。然后我们将名字分成一个数组
ln
(假设有些人可能有中间名)。我们将第 5 个字段(最后一个逗号之间的空格)设置为第一个字母,并将数组的最后一个元素后跟
@zzz.com
。如果 $5不为空:
使用 jq 的解决方案:
使用 -R 参数 (--raw-input) 读取纯文本。
使用 -r 参数 (--raw-output) 输出纯文本。