【问题标题】:how to find the column number in a text file using unix commands如何使用 unix 命令在文本文件中查找列号
【发布时间】:2014-05-10 07:31:14
【问题描述】:

假设我有一个包含 6 列的文本文件,如下所示

a|b|c|d|e|f

我知道文件中的某个地方存在字符“d”,但我想知道它的列号

我使用了以下命令

awk 's=index($0,"d"){print "position="s}' filename

但它也计算了我不想要的分隔符....我希望在“d”的情况下输出为 4

【问题讨论】:

    标签: linux shell unix awk grep


    【解决方案1】:

    定义“|”作为记录分隔符,并在 awk 中使用 NR 变量:

    awk -v RS="|" '/^d$/{print NR;}' filename
    

    ^d$ 更改为您想要匹配的任何内容。

    【讨论】:

    • 如果你有超过一行,这将失败,你需要删除一个{awk -v RS="|" '/^d$/{print NR}'
    【解决方案2】:

    使用 awk 你可以做到:

    awk -v val='d' -F '|' '{for (i=1; i<=NF; i++) if ($i==val) {print i} }' file
    4
    

    【讨论】:

    • 有效,但给出此错误:awk: warning: escape sequence \|'视为普通|'。这没关系-F'|'(没有逃脱)或这个-F\|(我的选择)。删除exit,它将适用于多行。
    • 奇怪的是,我在 OSX 上的 awk 并没有抱怨 \|
    • 它确实在我的Ubuntu 12.04 抱怨
    • 警告是善变的。一些 awk 会针对其他 awk 选择不做的事情发出警告,这并不罕见。还有一个用于 gawk 的 --lint 标志,它会产生更多警告。 POSIX 让 awk 实施者在他们认为合适的情况下以及是否/何时在他们的具体实施中方便时发出警告。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 2016-05-18
    • 1970-01-01
    • 2015-06-01
    • 2013-03-06
    • 2020-01-24
    相关资源
    最近更新 更多