使用awk打印字段的第一个和最后一个匹配项

约翰逊

我有一个制表符定界file

qrs     John    tuv
abcd    Sam     efgh
ijk     Sam     lmnp
abcd    Sam     efgh
ijk     Sam     lmnp
qrs     John    tuv

我正在尝试打印第二个字段与第二个字段中的上一行的值不匹配的行,并打印第二个字段与下一行不匹配的行。

我一直在玩以下内容的变体,但是没有什么能像我期望的那样正常工作:

awk -F"\t" '{
    name=$3;
    line=$0;
    getline;
    newname=$3;
    newline=$0;
    getline;
    nextname=$3;
    nextline=$0; 
    if (newname != name || name != nextname)print line"\n"nextline }' input.txt
混乱

根据您的评论,我假设它是一个具有登录和注销日期的日志文件,例如:

date1   John    logout
date2   Sam     login
date3   Sam     work1
date4   Sam     work2
date5   Sam     logout
date6   John    login

用途awk

awk 'NR!=1&&$2!=f{print p"\n"$0} {f=$2; p=$0}' file

在哪里:

  • NR!=1awk处理除第一NR以外的所有行时为true 包含当前文件中的行号)
  • $2!=f将第二个字段$2与变量的值进行比较ff稍后将进行设置)
    • 如果两种情况都适用,则awk打印的值p(前一行,也将在以后设置),换行符\n和当前行$0
  • 现在发生的事情,每行都要处理:变量f设置为第二个字段$2,变量p设置为当前行$0两者都将在下一次迭代中使用(处理下一行时)。

现在将打印第二个字段的第一次和最后一次出现,因此注销和登录日期和名称。输出将是:

date1   John    logout
date2   Sam     login
date5   Sam     logout
date6   John    login

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用“ sed”仅替换第一个和最后一个匹配项

来自分类Dev

找到第一个单词和最后一个单词的匹配项

来自分类Dev

仅打印第一个匹配项

来自分类Dev

Sed / Awk脚本可根据第一个字符打印字段

来自分类Dev

awk在逗号分隔的字段上仅保留第一个和最后一个值

来自分类Dev

如何使用grep仅打印第一个匹配项

来自分类Dev

Java打印排列中的第一个和最后一个整数

来自分类Dev

如何打印第一个和最后一个值?

来自分类Dev

Shell 程序打印第一个和最后一个参数及其总和

来自分类Dev

awk:在两个样式+ x线之间打印文本,后跟第一个匹配项

来自分类Dev

如何打印与最后一行的第一个字段匹配的所有行

来自分类Dev

Elasticsearch聚合中第一个和最后一个文档的返回字段

来自分类Dev

Elasticsearch聚合中第一个和最后一个文档的返回字段

来自分类Dev

CSV-Grep特定图案,打印第一个匹配项和该文件的第一行

来自分类Dev

Perl:匹配第一个字段上的重复项合并最后一个字段

来自分类Dev

使用Regex和Java查找第一个匹配项

来自分类Dev

网格视图-第一个和最后一个位置的第一项

来自分类Dev

打印第一行的第一个单词和最后一个单词

来自分类Dev

awk只打印两个模式之间的线,删除第一个匹配

来自分类Dev

AWK仅匹配多行文本中的行的第一个匹配项

来自分类Dev

使用awk或sed打印最后的1,2,3..Nth或第一个1,2,3 ... Nth匹配的块模式

来自分类Dev

使用SQLAlchemy获取第一个和最后一个元素

来自分类Dev

使用R计算每个变量的第一个和最后一个日期

来自分类Dev

使用递归查找列表的第一个和最后一个元素

来自分类Dev

最后打印第一个变量(索引=0)

来自分类Dev

sed更改另一个匹配项的第一个匹配项

来自分类Dev

使用下一个字段而不是第一个或最后一个来排序多个by和null值

来自分类Dev

为什么awk split()使第一个字段成为数组中的最后一个元素?

来自分类Dev

正则表达式替换特定匹配项的字符串的第一个和最后一个字符

Related 相关文章

  1. 1

    使用“ sed”仅替换第一个和最后一个匹配项

  2. 2

    找到第一个单词和最后一个单词的匹配项

  3. 3

    仅打印第一个匹配项

  4. 4

    Sed / Awk脚本可根据第一个字符打印字段

  5. 5

    awk在逗号分隔的字段上仅保留第一个和最后一个值

  6. 6

    如何使用grep仅打印第一个匹配项

  7. 7

    Java打印排列中的第一个和最后一个整数

  8. 8

    如何打印第一个和最后一个值?

  9. 9

    Shell 程序打印第一个和最后一个参数及其总和

  10. 10

    awk:在两个样式+ x线之间打印文本,后跟第一个匹配项

  11. 11

    如何打印与最后一行的第一个字段匹配的所有行

  12. 12

    Elasticsearch聚合中第一个和最后一个文档的返回字段

  13. 13

    Elasticsearch聚合中第一个和最后一个文档的返回字段

  14. 14

    CSV-Grep特定图案,打印第一个匹配项和该文件的第一行

  15. 15

    Perl:匹配第一个字段上的重复项合并最后一个字段

  16. 16

    使用Regex和Java查找第一个匹配项

  17. 17

    网格视图-第一个和最后一个位置的第一项

  18. 18

    打印第一行的第一个单词和最后一个单词

  19. 19

    awk只打印两个模式之间的线,删除第一个匹配

  20. 20

    AWK仅匹配多行文本中的行的第一个匹配项

  21. 21

    使用awk或sed打印最后的1,2,3..Nth或第一个1,2,3 ... Nth匹配的块模式

  22. 22

    使用SQLAlchemy获取第一个和最后一个元素

  23. 23

    使用R计算每个变量的第一个和最后一个日期

  24. 24

    使用递归查找列表的第一个和最后一个元素

  25. 25

    最后打印第一个变量(索引=0)

  26. 26

    sed更改另一个匹配项的第一个匹配项

  27. 27

    使用下一个字段而不是第一个或最后一个来排序多个by和null值

  28. 28

    为什么awk split()使第一个字段成为数组中的最后一个元素?

  29. 29

    正则表达式替换特定匹配项的字符串的第一个和最后一个字符

热门标签

归档