【问题标题】:IGNORECASE in file comparison with awkIGNORECASE 与 awk 进行文件比较
【发布时间】:2014-07-22 18:11:38
【问题描述】:

这是我的代码:

'FNR==NR {a[$1 FS $2 FS $3 FS $4]++; next} !a[$1 FS $2 FS $3 FS $5]' comparegam.txt workstudyusers1.csv >noidea6.txt

它正在做我需要的,除了我需要忽略大小写。我曾尝试在不同的地方使用 IGNORECASE=1,但我无法让它工作。它要么失败,要么给我零结果,要么一起忽略它。我尝试使用 BEGIN [IGNORECASE = 1} 没有运气。

任何帮助将不胜感激,我迷茫了。我在终端窗口中运行它,而不是从 bash 脚本。这是最终目标

注意:输出必须包含大小写以匹配原始文件

这是我用 IGNORECASE 尝试过的确切代码:

awk -F, 'IGNORECASE=1 FNR==NR {a[$1 FS $2 FS $3 FS $4]++; next} !a[$1 FS $2 FS $3 FS $5]' comparegam.txt workstudyusers1.csv >noidea6.txt
awk -F, 'FNR==NR {IGNORECASE=1} {a[$1 FS $2 FS $3 FS $4]++; next} !a[$1 FS $2 FS $3 FS $5]' comparegam.txt workstudyusers1.csv >noidea6.txt
awk -F, '{IGNORECASE = 1} FNR==NR {a[$1 FS $2 FS $3 FS $4]++; next} !a[$1 FS $2 FS $3 FS $5]' comparegam.txt workstudyusers1.csv >noidea6.txt
awk -F, 'BEGIN {IGNORECASE = 1} FNR==NR {a[$1 FS $2 FS $3 FS $4]++; next} !a[$1 FS $2 FS $3 FS $5]' comparegam.txt workstudyusers1.csv >noidea6.txt
awk -F, 'FNR==NR {{IGNORECASE=1} a[$1 FS $2 FS $3 FS $4]++; next} !a[$1 FS $2 FS $3 FS $5]' comparegam.txt workstudyusers1.csv >noidea6.txt

以及这些的各种迭代。

【问题讨论】:

  • 不区分大小写比较,尝试大写比较。
  • 你在使用 gawk (GNU awk) 吗? IGNORECASE 特定于 gawk。您在标题中将其拼写为IGNORCASE;你确定你在代码中拼写正确吗?复制并粘贴不起作用的确切代码。
  • 我添加了我一直在尝试的不同迭代,还修复了标题。下层工作了,但我仍然想知道为什么 IGNORECASE 不起作用。我做了 awk man 并且 IGNORECASE 被列为一个选项。

标签: awk ignore-case


【解决方案1】:
'
  FNR==NR {
    a[tolower($1 FS $2 FS $3 FS $4)]++;
    next
  }
  !a[tolower($1 FS $2 FS $3 FS $5)]
' comparegam.txt workstudyusers1.csv >noidea6.txt

【讨论】:

  • 出于好奇,我注意到您将括号从 [ 更改为 ( 在 $1 部分附近,具体需要还是只是偏好?
  • @moore1emu () 在函数参数周围,但[] 仍然在那里用tolower 函数的结果索引数组。
猜你喜欢
  • 1970-01-01
  • 2011-01-06
  • 2014-01-13
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多