【问题标题】:AWK, delete record when field matchAWK,字段匹配时删除记录
【发布时间】:2013-04-25 21:29:42
【问题描述】:

我使用一个有 2 个字段的常规文件,第一个是帐户名称(带有空格),第二个是一个整数,两个字段用 \t 分隔,所有记录都用 \n 分隔。我的问题是我需要删除与第一个字段字符串匹配的记录。我的代码如下:

awk -v APENOM="$apeynom" -F "\t" ' $1 != APENOM { print $0; } ' $1 > $TEMP_FILE_2

它适用于大多数记录,但不适用于第一条记录,它永远不会匹配第一条记录中的第一个字段?

【问题讨论】:

  • 您应该发布输入文件(或至少一个示例) 以及$apeynom 的值,并显示您当前获得的输出和您期望的输出。
  • 您的输入文件是在 Windows 上创建的,因此在行尾有虚假的 control-M。运行cat -v file 以查看它们,然后在其上运行dos2unix 并重试。
  • 确实是记事本,当我看到那个特殊的字符时,我意识到。感谢您的回复。

标签: bash awk


【解决方案1】:

尝试将脚本更改为:

'$1 != APENOM { print $0; next } { print "MISMATCH[", $1, "]" }'

我感觉你的输入很脏。在分隔制表符或其他东西之前可能有一个空格。这将在您跳过时打印出 $1 是什么。

【讨论】:

  • 我意识到我正在使用在记事本中创建的文件,在 vi 中编辑,但是对于一些磨损的东西,第一条记录从未被删除。我再次创建了它,这次是在 vi 中,它非常有效!所以问题是脏输入,在 vi 上看起来不错,但它不是......我觉得很笨,感谢您的帮助和时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多