Bash-从TXT生成CSV文件

时间:2018-10-18 12:30:50

标签: bash grep

我是使用bash和grep的新手...我正在尝试从包含以下行的TXT文件中输出CSV文件:

输入:

1. Fisrt - Name: Joanna Last - Name: Yang
Place of birth: Paris Date of birth: 01/01/1972 Sex: F
Number: 0009876541234567
2. Fisrt - Name: Bob Last - Name: Lee
Place of birth: London Date of birth: 05/08/1969 Sex: M
Number: 0005671890765223

输出:

"Joanna","Yang","Paris","01/01/1972","F","0009876541234567"
"Bob","Lee","London","05/08/1969","M","0005671890765223"

任何建议将不胜感激!!!!

3 个答案:

答案 0 :(得分:1)

仅使用一个带有grep的正则表达式并不容易。
您可以尝试使用多个正则表达式并合并结果。

例如:
要获取,您可以使用以下正则表达式:"Fisrt - Name: ([a-zA-Z]+)"
将其保存到变量中。

接下来要获取生日,您可以使用"birth: ([0-9]+\/[0-9]+\/+[0-9]+)"
将其保存到变量中。

对每个部分执行此操作,并用逗号将结果连接起来。

这显然不是最好的方法,但这是一个开始。 为了帮助使用正则表达式,您可以使用https://regex101.com/

也许尝试使用sed command line

答案 1 :(得分:0)

如果您的文件格式很好并且格式很好,则不需要正则表达式。
我们一次可以读取三行,并在空格处分割它们-我们仅对指定的字段感兴趣。如果您可以“断言”文件中的任何字段都不包含空格(我认为其中没有有效的人名...)?,您可以这样做:

while
    IFS=' ' read -r _ _ _ _ name _ _ _ last &&
    IFS=' ' read -r _ _ _ birthplace _ _ _ birthdate _ sex &&
    IFS=' ' read -r _ number
do
    printf '"%s","%s","%s","%s","%s","%s"\n' \
        "$name" "$last" "$birthplace" "$birthdate" "$sex" "$number"
done <input

可通过onlinedbg获得实时版本。

答案 2 :(得分:0)

一行:

~ $ cat yourfile.txt 
1. Fisrt - Name: Joanna Last - Name: Yang
Place of birth: Paris Date of birth: 01/01/1972 Sex: F
Number: 0009876541234567
2. Fisrt - Name: Bob Last - Name: Lee
Place of birth: London Date of birth: 05/08/1969 Sex: M
Number: 0005671890765223
~ $ sed -r "s/^.*Fisrt - Name: (.*) Last - Name: (.*)$/\1,\2;/g" yourfile.txt | sed -r "s/^Place of birth: (.*) Date of birth: (.*) Sex: (.*)$/\1,\2,\3;/g" | sed -r "s/^Number: (.*)$/\1/g" | sed -n 'H;${x;s/;\n/,/g;s/^,//;p;}' | tail -n +2 > yourfile.csv
~ $ cat yourfile.csv 
Joanna,Yang,Paris,01/01/1972,F,0009876541234567
Bob,Lee,London,05/08/1969,M,0005671890765223
~ $ 

希望有帮助。