linux - awk 在 linux 中子集化失败

标签 linux bash shell awk grep

我正在使用一个巨大的制表符分隔文件,我试图根据第 45 列中字符串“car”的可用性对表进行子集化。这是文件的样子

col1    col2   ...   col44    col45

JPO     JIO    ...    JKU     car
JKO     LIC    ...    YHI     car/kcar
KJG     KLE    ...    HIY     tm/car/kcar

我应用了以下命令来进行子集化

awk 'BEGIN{IGNORECASE=1} $45 ~ /^car$/ '  filepath | wc

我知道文件中有 90 行作为“car”,尽管我之前知道(通过在 excel 中查看文件)超过 1500 行的 col45 作为 car

知道这里发生了什么吗?

谢谢!

最佳答案

这似乎在 gawk 中运行良好(我的常规 awk 没有 IGNORECASE):

$ cat foo.awk
BEGIN { IGNORECASE = 1; FS = "\t"; }
$2 ~ /^car/
$ cat foo.inp
l1  notcar
l2  CAR/blah
l3  car
$ gawk -f foo.awk < foo.inp
l2  CAR/blah
l3  car
$ 

(我使用了 2 美元而不是 45 美元,并且我假设您想要的是 car 开始的东西,而不是“完全等于”car。)

关于linux - awk 在 linux 中子集化失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17494048/

相关文章:

c - 在 Linux 中读取 USB 端口

linux - bash 脚本调用显示不一致的行为

linux - 在shell中递归地将文件内容添加到文件中

linux - 即使在添加到 sudoers 后关机也会要求输入密码

c++ - 使用 exec 在新进程中执行系统命令

python - 基准测试 python(命令行)

bash - 将文本文件第一行的日期 append 到每一行的开头

regex - AWK 为逗号和引号设置多个分隔符

linux - 拆分索引溢出 shell 脚本

linux - 将 http 非 www 转移到 http www,并将 https 非 www 转移到 https www