复制字符出现偶数次的行

复制字符出现偶数次的行

我收到了一些需要加载到数据库中的文件。这些文件具有用户输入,并且在某些情况下使用引号字符的次数为奇数。我想过滤掉这些记录。

我想 grep 包含特定字符的行奇数或偶数次。

输入示例:

12345|what"s wrong|20121212

答案1

awk

awk -F \" 'NF % 2' < yourfile

对于偶数次(字段以"- 分隔的字段数为奇数)。

awk -F \" 'NF % 2 == 0' < yourfile

或者将文件拆分为两个文件:

awk -F \" '{if (NF%2) print > "even.txt"
            else print > "odd.txt"}' < yourfile

为奇数次。

grep对于偶数,用,:

grep -Ex '(([^"]*"){2})*[^"]*'

对于奇数,请添加该-v选项。

答案2

选择珀尔方法:

-- 输出"出现奇数次的行

perl -ne 'print if y/\"// % 2' yourfile

-- 输出出现偶数的"

perl -ne 'print if y/\"// % 2 == 0' yourfile

  • y///- Perl 音译运算符

答案3

sed -ne '
   h;:a
   s/"//;T
   s/"//;ta
   g;p
' yourfile

在职的

  1. 保存原件,因为破坏过程将开始。
  2. 我们设置一个循环,当第一个 del 不成功时,我们一次连续地清除一个引号 => 终止该行的操作 => 存在偶数个引号。
  3. 在第二次清理中,如果我们不成功=>奇数个引号,那么我们从保留的原件中检索并打印。
  4. 否则我们循环回来。

相关内容