如何使用unix命令在文本文件中查找列号

use*_*752 4 unix linux shell awk grep

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

a|b|c|d|e|f
Run Code Online (Sandbox Code Playgroud)

我知道字符'd'存在于文件中的somwhere,但我想知道列号为no

我使用了以下命令

awk 's=index($0,"d"){print "position="s}' filename
Run Code Online (Sandbox Code Playgroud)

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

anu*_*ava 6

使用awk你可以做到:

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


yej*_*xin 6

定义"|" 作为Record Seperator,并在awk中使用NR变量:

awk -v RS="|" '/^d$/{print NR;}' filename
Run Code Online (Sandbox Code Playgroud)

改变^d$你想要匹配的任何东西.

  • 如果你有多行,这将失败,你需要删除`{`到`awk -v RS ="|" '/ ^ d $/{print NR}'` (2认同)