加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 移动行以跟随文件中的另一行

发布时间:2020-12-14 02:11:52 所属栏目:Linux 来源:网络整理
导读:我有一个文件在文件中有一行如下: check=('78905905f5a4ed82160c327f3fd34cba') 我希望能够移动此行以遵循如下所示的行: files=('somefile.txt') 该阵列虽然有时可以跨越多行,例如: files=('somefile.txt' 'file2.png' 'another.txt' 'andanother...')tex
我有一个文件在文件中有一行如下:

check=('78905905f5a4ed82160c327f3fd34cba')

我希望能够移动此行以遵循如下所示的行:

files=('somefile.txt')

该阵列虽然有时可以跨越多行,例如:

files=('somefile.txt'
       'file2.png'
       'another.txt'
       'andanother...')

text
in between

check=('78905905f5a4ed82160c327f3fd34cba'
       '5277a9164001a4276837b59dade26af2'
       '3f8b60b6fbb993c18442b62ea661aa6b')

数组/行总是以a)结尾,其间没有文本将包含一个闭括号.

我得到一些建议,awk可以做到这一点:

awk '/files/{
    f=0
    print $0
    for(i=1;i<=d;i++){ print a[i]  }
    g=0
    delete a # remove array after found
    next
}
/check/{ f=1; g=1 }
f{ a[++d]=$0 }
!g' file

这只会跨越一条线.我被告知要扩大搜索范围:

awk '/source/ && /)$/{
    f=0
    print $0
    for(i=1;i<=d;i++){ print a[i]  }
    g=0
    delete a # remove array after found
    next
}
/md5sum/ && /)$/{ f=1; g=1 }
f{ a[++d]=$0 }
!g'

刚学习awk所以我很感激你的帮助.或者,如果有其他工具可以做到这一点,我想听听它.有人告诉我’ed’这些类型的功能.

解决方法

首先回答你的上一个问题,是的,awk是典型的Unix工具,其他候选者是非常强大的 Perl,Python,或者……我最喜欢的… Ruby. awk的一个优点是它总是存在;它是基础系统的一部分.解决此类问题的另一种方法是使用控制ed(1)或ex(1)的编辑器脚本.

好的,修改过的问题的新程序.该程序将根据需要向上或向下移动“检查”行,以便它们遵循“文件”行.

BEGIN {
  checkAt = 0
  filesAt = 0
  scanning = 0
}

/check=(/ {
  checkAt = NR
  scanning = 1
}

/files=(/ {
  filesAt = NR
  scanning = 1
}

/)$/ {
  if (scanning) {
    if (checkAt > filesAt) {
      checkEnd = NR
    } else {
      filesEnd = NR
    }
    scanning = 0
  }
}

{
  lines[NR] = $0
}

END {
  for (i = 1; i <= NR; ++i) {
    if (checkAt <= i && i <= checkEnd) {
      continue
    }
    print lines[i]
    if (i == filesEnd) {
      for (j = checkAt; j <= checkEnd; ++j) {
        print lines[j]
      }
    }
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读