【发布时间】: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
【问题讨论】:
假设我有一个包含 6 列的文本文件,如下所示
a|b|c|d|e|f
我知道文件中的某个地方存在字符“d”,但我想知道它的列号
我使用了以下命令
awk 's=index($0,"d"){print "position="s}' filename
但它也计算了我不想要的分隔符....我希望在“d”的情况下输出为 4
【问题讨论】:
定义“|”作为记录分隔符,并在 awk 中使用 NR 变量:
awk -v RS="|" '/^d$/{print NR;}' filename
将^d$ 更改为您想要匹配的任何内容。
【讨论】:
{到awk -v RS="|" '/^d$/{print NR}'
使用 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,它将适用于多行。
\|。
Ubuntu 12.04 抱怨
--lint 标志,它会产生更多警告。 POSIX 让 awk 实施者在他们认为合适的情况下以及是否/何时在他们的具体实施中方便时发出警告。