【问题标题】:How to remove backslash from the end of the string value of a column in a tab separated text file?如何从制表符分隔的文本文件中列的字符串值末尾删除反斜杠?
【发布时间】:2017-05-10 07:16:09
【问题描述】:

我有一个制表符分隔的文本文件,其中包含一些列。对于某些行,特定列的值(它是一个字符串)的末尾有一个反斜杠,当我想将这些数据导入 PostgreSQL 数据库时,这会导致问题。对于拥有它的所有行,我想从该列的字符串值末尾删除该反斜杠。我该怎么做?

例如,在这一行中,您看到第二列末尾有一个反斜杠

    862B25B3    Making Large-Scale Nystr{\  making large scale nystr    2010    2010        international conference on machine learning    icml    465F7C62    19555

【问题讨论】:

  • 测试数据会很好。
  • 我加了一个例子
  • @JamesBrown 当我想粘贴示例时它会忽略标签
  • 用块引用或代码标签包装它
  • 现在我正确地添加了一个例子@JamesBrown

标签: text awk sed grep


【解决方案1】:

在 awk 中。在第二个 ($2) 制表符分隔 (-F'\t') 列的末尾,使用 sub 将尾随 \ 替换为 ""(无):

$ awk -F'\t' -v OFS='\t' 'sub(/\\$/,"",$2)||1' foo

如果\ 可以在任何字段的末尾,则需要对其进行“for”循环:

$ awk -F'\t' -v OFS='\t' '{for(i=1;i<=NF;i++)sub(/\\$/,"",$i)}1' foo

【讨论】:

  • 这个命令似乎对选项卡有影响。为文件运行此操作后,反斜杠已被删除,但列之间的选项卡也已被删除!
  • 哦,是的,我的错。我也没有将OFS 设置为标签。
【解决方案2】:

使用 sed,删除制表符之前或行尾的反斜杠:

sed 's/\\\t/\t/g;s/\\$//' file

【讨论】:

    猜你喜欢
    • 2021-02-11
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    相关资源
    最近更新 更多