【问题标题】:Bash script won't add @gmail.com to end of .csv input column [duplicate]Bash 脚本不会将@gmail.com 添加到 .csv 输入列的末尾 [重复]
【发布时间】:2019-10-25 11:36:19
【问题描述】:
while IFS=, read -r col1 col2 col3
do
    email="$col3"
    email+='@gmail.com'
    echo $email

done < ~/Desktop/Names.csv

我不必对第 1 列或第 2 列做任何特殊处理,但将 @gmail.com 添加到第 3 列只会输出 @gmail.com 或者如果输入字符串较长 @gmail.com+输入字符串的较长位.

即。

如果第 3 列是 Dekkars,我会收到 @gmail.com。如果是 aaaaaaaaaaa(比 @gmail.com 长一个长度)我会得到 @gmail.coma

我确定这与 @ 符号有关,但我尝试使用 \ 来转义它、单引号等。有什么想法吗?

我已经阅读了连接 bash 字符串,并且我正在执行它所建议的操作,但结果与预期不同。

这是输入数据

Test Name,8,aaaaaaaaaaa
John Doe,8,bbbbbbbbbbbb
Name,Grade,ID

(注意,我在底部有列,否则我的 while 循环不会读取底部行)

输出

@gmail.coma
@gmail.combb

【问题讨论】:

  • 您尝试过email="${col3}@gmail.com" 吗?不确定 bash 中的 +=...@ 受单引号保护,因此不会被解释。
  • 还在做同样的事情!这让我发疯。想知道如果在 .csv 上再添加一列,并且电子邮件已经存在,是不是更容易......
  • 当您处理基于列的数据时,请考虑尝试一下 awk。
  • 请提供至少一行输入数据,最好是两行 -- 输入 shell 时,代码在 bash 和 zsh 中工作。
  • 我闻到了行尾的问题。 $col3 最后可能包含一个 CR (\r, 0x0D);打印它并在其后跟@gmail.com@gmail.com 写入行首。

标签: bash csv


【解决方案1】:

dos2unix 解决了这个问题。将其合并到我的脚本中,这样我就不必记得每次更改 .csv 时都调用它...

谢谢大家!

【讨论】:

    猜你喜欢
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    相关资源
    最近更新 更多