AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 827638
Accepted
Valeriu
Valeriu
Asked: 2017-01-21 12:58:50 +0800 CST2017-01-21 12:58:50 +0800 CST 2017-01-21 12:58:50 +0800 CST

如何输出具有特殊模式的列

  • 772

我有一个专栏,有几句话:

scatman
batman
superman
scatman
scatman
batman
superman
scatman
scatman
batman
superman
scatman
batman
WWWWWWWW
superman
scatman
batman
superman
scatman

我应该做一些模式,我需要一个字一个字三个字:scatman,batman,superman。在哪里,我有重复的单词,比如第 4 行和第 5 行的 scatman 和 scatman 或者我有其他单词的地方,我应该删掉我写的:

grep "scatman\|batman\|superman" file

好的,我拒绝了 WWWWWWWW 这个词,但我不明白如何逐字显示我的专栏。我有结果:

scatman
batman
superman
scatman
scatman
batman
superman
scatman
scatman
batman
superman
scatman
batman
superman
scatman
batman
superman
scatman

在第 4 行和第 5 行,我有重复的单词,但我不喜欢这样。我哪里有错误?

linux unix bash shell shell-scripting
  • 2 2 个回答
  • 62 Views

2 个回答

  • Voted
  1. Best Answer
    Talal Al-Khalifa
    2017-01-21T13:26:48+08:002017-01-21T13:26:48+08:00

    这将完全按照您的意愿进行

    #!/bin/bash
    array=(
    [0]="scatman"
    [1]="batman"
    [2]="superman"
    )
    count=0
    while read line; do
        for i in "${array[@]}";
        do
        if [[ $count == 3  ]]; then
        count=0
        fi
        if [[ $line == ${array[$count]} ]]; then
        #echo "$line"
        printf "%s " $line
    
        # uncomment if you want every word on a new line
        #echo "$line" >> newfile.txt # each word on a line
        #or
        # uncomment if you want all will be on one line
        #printf "%s " $line >> newfile.txt
    
        count=$((count+1))
        else
        continue
        fi
    
        done
    
    done < file.txt #this is your original file
    

    将在新行上打印出每个单词,如下所示:

    scatman
    batman
    superman
    scatman
    batman
    superman
    scatman
    batman
    superman
    scatman
    batman
    superman
    scatman
    batman
    superman
    scatman
    

    或者像这样的一行:

    scatman batman superman scatman batman superman scatman batman superman scatman batman superman scatman batman superman scatman
    
    • 0
  2. Greg Tarsa
    2017-01-21T16:55:15+08:002017-01-21T16:55:15+08:00

    这可以通过grepand来完成awk:

    cat words.txt |
    grep -E 'scatman|batman|superman' |
    awk '{
          last_word = cur_word
          cur_word = $0
          if (cur_word == last_word)
            next
          else
            print $0
          }' < word.list 
    

    允许一个扩展的grep -E正则表达式,让您可以|用作or搜索目标。awk代码查找重复的单词并跳过它们。

    如果您愿意,您可以在一行中完成所有这些操作:

    cat words.txt | grep -E 'scatman|batman|superman' | awk '{ last_word = cur_word; cur_word = $0; if (cur_word == last_word) next; else print $0 }' < word.list`
    
    • 0

相关问题

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve