【问题标题】:Print items from text file with \n delimiter to a CSV file将带有 \n 分隔符的文本文件中的项目打印到 CSV 文件
【发布时间】:2015-11-23 19:37:32
【问题描述】:

我有一个文件,打印了几行如下:

               username: no_way
               EMAILID: some@email.com
               enc_username: DEFAULT
               MACHINE_CODE: 
               FIRSTNAME: John
               LASTNAME: Doe
               ACCOUNT_STATUS: Y

我想捕获用户名:、EMAILID:、FIRSTNAME: 和 LASTNAME: 并在 CSV 文件中打印它们:

no_way,some@email.com,john,doe 

...在每一行。

我尝试使用:

cat file | egrep 'ACCOUNT_STATUS:\ Y' &  egrep 'EMAILID:' & egrep 'username:' >> newfile

但是,这不起作用。我意识到这是因为 |管道仅过滤该单行,并且由于它们位于不同的行上,因此这是行不通的。

然后,我尝试更改分隔符:

tr -dc '\n' ',' file | tee newfile

但是,无论我使用“-dc”还是任何选项,这都会给我一个错误。

我需要做什么才能将这些行放入 CSV 文件中?

我正在使用 bash。

【问题讨论】:

    标签: bash csv


    【解决方案1】:

    使用 awk

    $ awk '$1 ~ /^(username:|EMAILID:|FIRSTNAME:)$/{printf "%s,",$2} $1 ~ /LASTNAME:/{print $2}' file
    no_way,some@email.com,John,Doe
    

    工作原理

    • $1 ~ /^(username:|EMAILID:|FIRSTNAME:)$/{printf "%s,",$2}

      如果第一个字段与username:EMAILID:FIRSTNAME: 中的一个匹配,则打印第二个字段,后跟逗号。

    • $1 ~ /LASTNAME:/{print $2}'

      如果第一个字段与 LASTNAME: 匹配,则打印第二个字段,后跟一个换行符。

    使用 bash

    while read key value
    do
        case "$key" in 
            username:|EMAILID:|FIRSTNAME:) printf "%s," "$value";;
            LASTNAME:) printf "%s\n" "$value";;
        esac
    done <file
    

    这会产生输出:

    no_way,some@email.com,John,Doe
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      • 2019-11-11
      相关资源
      最近更新 更多