【问题标题】:Splitting a column in a csv file in Bash在 Bash 中拆分 csv 文件中的列
【发布时间】:2019-09-21 00:39:30
【问题描述】:

我想从 csv 文件的第二列中提取值,并将提取的值存储在新列中。

我的数据集示例:

page_name      post_id                        page_id
A              86680728811_272953252761568    86680728811   
A              86680728811_273859942672742    86680728811
B              86680728033_281125741936891    86680728033
B              86680728033_10150500662053812  86680728033

我想提取下划线后面的数字并将它们存储在新列中。示例输出:

page_name      post_id                        page_id
A              272953252761568                86680728811   
A              273859942672742                86680728811
B              281125741936891                86680728033
B              10150500662053812              86680728033

我尝试使用此代码:

cat FB_Dataset.csv | sed -Ee 's/(.*)post_id/\1post_id/' -e 's/,[_ ]/,/' -e 's/_/,/'

但我没有得到想要的输出。

感谢任何帮助。谢谢。

【问题讨论】:

    标签: bash csv unix


    【解决方案1】:
    sed 's/[0-9][0-9]*_//' < a.csv  
    

    其中 a.csv 是包含您的原始数据的文件
    编辑添加 [0-9]

    【讨论】:

    • [0-9]*_page_name 中删除_。我建议将* 替换为\+
    • 当我使用's/[0-9]*_//' 时,我得到一个名为'name' 的新列(从page_name 拆分),其中包含字符串的第一部分(下划线前的数字)我希望删除此列。另一个名为“post_id”的列包含所需的输出。
    • 当我使用's/[0-9]\+_//' 时,我收到一个错误“RE 错误:括号不平衡”并且's/[0-9]\+_//'返回一个空文件。谢谢
    • 没有括号,而是括号。另请参阅我对@Cyrus 的回复 - 我会更新我的答案
    • @leena:检查您的文件是否有特殊字符:cat -A FB_Dataset.csv
    猜你喜欢
    • 2013-04-01
    • 2022-01-26
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 2012-04-30
    相关资源
    最近更新 更多