【问题标题】:Remove a string found in column 1 from column 2从第 2 列中删除在第 1 列中找到的字符串
【发布时间】:2018-10-25 02:29:32
【问题描述】:

我有一个非常大的 excel 文件(150000 行)。对于每一行,我在第 1 列中有一个字符串,我需要从第 2 列中找到并删除它。

Input column 1    Input column 2                     Output column3
-------------------------------------------------------------------------
dog3456           dog3456; cat2345; chicken3595      cat2345; chicken3595
sheep23349        bird2048; rhino2948; sheep23349    sheep23349 
frog248034        toad3956; frog248034               frog248034

请问大家有什么建议吗?

谢谢!

【问题讨论】:

  • 不是我的领域,但相当肯定 awk 和其他 shell 工具不处理 excel 文件(即 xls/xlsx)。最好使用 Python 之类的工具来处理文件。
  • 我还有制表符分隔和 csv 格式的文件
  • OK - 那么可能使用 awk 等。另一件事是您的描述和示例不匹配(示例的第一行与描述匹配,但第 2 行和第 3 行显示相反的行为)。是哪个?
  • 你有什么尝试吗?另外,请正确编辑数据,在数据前加四个空格或在编辑器中使用{}。真正的标签会很好。
  • 抱歉,Iine 1 显示了正确的格式。请忽略第 2 行和第 3 行。

标签: shell awk text-processing two-columns


【解决方案1】:

我决定您将电子表格的两列导出为制表符分隔。

cat data.tab
dog3456 dog3456; cat2345; chicken3595 sheep23349 bird2048; rhino2948; sheep23349 frog248034 toad3956; frog248034

第三列由 awk 脚本输出。

awk -F'\t' '{split($2,a,";"); for(i in a){gsub(" ","",a[i]); if(a[i]!=$1)printf("%s; ",a[i])}print ""}' data.tab

输出:
cat2345; chicken3595; bird2048; rhino2948; toad3956;

【讨论】:

    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多