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
    • 最新
    • 标签
主页 / unix / 问题

问题[text-processing](unix)

Martin Hope
Paolo Lorenzini
Asked: 2025-04-18 00:09:08 +0800 CST

根据行号范围编辑特定列中的所有值

  • 6

我在 Linux 机器上有一个PDB 文件(蛋白质中原子的坐标):

ATOM      1   N  GLY A   1       0.535  51.766   5.682  1.00  0.00              
ATOM      2  CA  GLY A   1      -0.712  50.962   5.596  1.00  0.00              
ATOM      3   C  GLY A   1      -1.243  50.872   4.179  1.00  0.00              
ATOM      4   O  GLY A   1      -1.313  51.888   3.492  1.00  0.00              
ATOM      5   N  GLN A   2      -1.600  49.664   3.737  1.00  0.00              
ATOM      6  CA  GLN A   2      -2.221  49.468   2.423  1.00  0.00              
ATOM      7   C  GLN A   2      -3.542  48.719   2.507  1.00  0.00              
ATOM      8   O  GLN A   2      -3.722  47.844   3.356  1.00  0.00              
ATOM      9  CB  GLN A   2      -1.280  48.738   1.468  1.00  0.00              
ATOM     10  CG  GLN A   2      -0.976  47.294   1.830  1.00  0.00              
....     ..  ..   .. .   .       ....   ....     ....   ....  ....
TER   SPLIT LINE FOR INTERNAL USE ONLY
ATOM      1  O5'  G  A   1     -44.412  97.503  31.177  1.00  0.00              
ATOM      2  C5'  G  A   1     -45.447  96.803  31.882  1.00  0.00              
ATOM      3  C4'  G  A   1     -45.225  95.295  31.894  1.00  0.00              
ATOM      4  O4'  G  A   1     -46.441  94.578  31.654  1.00  0.00              
ATOM      5  C3'  G  A   1     -44.328  94.850  30.748  1.00  0.00              
ATOM      6  O3'  G  A   1     -42.943  94.877  31.129  1.00  0.00              
ATOM      7  C2'  G  A   1     -44.804  93.425  30.542  1.00  0.00              
ATOM      8  O2'  G  A   1     -44.163  92.592  31.466  1.00  0.00              
ATOM      9  C1'  G  A   1     -46.304  93.444  30.772  1.00  0.00              
ATOM     10  N9   G  A   1     -46.965  93.699  29.495  1.00  0.00
....     ..  ..   .  .   .     .......  ......   .....  ....   ...

TER 记录明确标记了特定氨基酸链的结束。我想用 awk 更改第 5 列的蛋白质链 ID,以便在 TER 之后为新的链分配正确的 ID。

预期输出:

ATOM      1   N  GLY A   1       0.535  51.766   5.682  1.00  0.00              
ATOM      2  CA  GLY A   1      -0.712  50.962   5.596  1.00  0.00              
ATOM      3   C  GLY A   1      -1.243  50.872   4.179  1.00  0.00              
ATOM      4   O  GLY A   1      -1.313  51.888   3.492  1.00  0.00              
ATOM      5   N  GLN A   2      -1.600  49.664   3.737  1.00  0.00              
ATOM      6  CA  GLN A   2      -2.221  49.468   2.423  1.00  0.00              
ATOM      7   C  GLN A   2      -3.542  48.719   2.507  1.00  0.00              
ATOM      8   O  GLN A   2      -3.722  47.844   3.356  1.00  0.00              
ATOM      9  CB  GLN A   2      -1.280  48.738   1.468  1.00  0.00              
ATOM     10  CG  GLN A   2      -0.976  47.294   1.830  1.00  0.00                 
TER   SPLIT LINE FOR INTERNAL USE ONLY
ATOM      1  O5'  G  B   1     -44.412  97.503  31.177  1.00  0.00              
ATOM      2  C5'  G  B   1     -45.447  96.803  31.882  1.00  0.00              
ATOM      3  C4'  G  B   1     -45.225  95.295  31.894  1.00  0.00              
ATOM      4  O4'  G  B   1     -46.441  94.578  31.654  1.00  0.00              
ATOM      5  C3'  G  B   1     -44.328  94.850  30.748  1.00  0.00              
ATOM      6  O3'  G  B   1     -42.943  94.877  31.129  1.00  0.00              
ATOM      7  C2'  G  B   1     -44.804  93.425  30.542  1.00  0.00              
ATOM      8  O2'  G  B   1     -44.163  92.592  31.466  1.00  0.00              
ATOM      9  C1'  G  B   1     -46.304  93.444  30.772  1.00  0.00              
ATOM     10  N9   G  B   1     -46.965  93.699  29.495  1.00  0.00  

所有内容都需要用相同的空格分隔,以下安排是错误的:

ATOM   3674  CD1 PHE A 460       2.350  79.471  35.466  1.00  0.00              
ATOM   3675  CD2 PHE A 460       1.037  81.443  35.196  1.00  0.00              
ATOM   3676  CE1 PHE A 460       2.425  79.321  34.080  1.00  0.00              
ATOM   3677  CE2 PHE A 460       1.108  81.298  33.805  1.00  0.00              
ATOM   3678  CZ  PHE A 460       1.805  80.232  33.250  1.00  0.00              
TER SPLIT LINE FOR B USE ONLY
ATOM 1 O5' G B 1 -44.412 97.503 31.177 1.00 0.00
ATOM 2 C5' G B 1 -45.447 96.803 31.882 1.00 0.00
ATOM 3 C4' G B 1 -45.225 95.295 31.894 1.00 0.00
ATOM 4 O4' G B 1 -46.441 94.578 31.654 1.00 0.00
ATOM 5 C3' G B 1 -44.328 94.850 30.748 1.00 0.00

此外,该文件以此结尾:

TER
ENDMDL

文件末尾有一个空白行,需要保留原样

text-processing
  • 3 个回答
  • 61 Views
Martin Hope
sloppy
Asked: 2025-04-14 08:28:02 +0800 CST

匹配两行中的多个变量并删除整个条目

  • 5
MATCH1.MATCH2 {
    always same MATCH3
}

所有三个MATCH必须匹配。

输入:

foo.bar {
    always same bus
}
1.2 {
    always same 3
}
a.b {
    always same c
}
i.ii {
    always same iii
}
b.2 {
    always same c
}
1.2 {
    always same b
}

假设我想删除1,2和3MATCH 条目(从名称到右花括号})

输出:

foo.bar {
    always same bus
}
a.b {
    always same c
}
i.ii {
    always same iii
}
b.2 {
    always same c
}
1.2 {
    always same b
}

我尝试过多种方法,sed但没有一种能让我接近目标:

sed "/$match1\.$match2/{/$match3//d;}" ./input
sed "/^$match1\.$match2 {/,/^always same $match3/d" ./input
# ...

我最纠结的是,有两行需要匹配。我试过在中间添加\n和 ,.*但没成功。

以下是我通过仅匹配第一行来删除条目的方法,如果有帮助的话:

sed "/^$match1\.$match2 {/,/^}/d" ./input # no match3
text-processing
  • 5 个回答
  • 77 Views
Martin Hope
Thierry Blanc
Asked: 2025-02-06 18:15:46 +0800 CST

删除包含嵌套括号的括号语句

  • 8

一个典型的乳胶问题:

\SomeStyle{\otherstyle{this is the \textit{nested part} some more text...}}

现在我想删除所有\SomeStyle{...}内容但不删除内容。内容包含嵌套括号。上面的行应改为:

\otherstyle{this is the \textit{nested part} some more text...}

问题:

  1. 是否有任何 Latex 编辑器可以提供此方法?
  2. 什么编辑器/脚本可以做到这一点?
  3. 如何用 sed 来实现?[🤓]

我的解决方案是使用 sed 的 bash 脚本。

  1. 准备文本:用 ascii 铃声标记替换字符串,在每个括号后添加换行符
  2. 循环:查找 { -> 将 X 添加到保持空间,查找 } -> 从保持空间中移除 X,保持空间为空 -> 移除关闭 }
  3. 恢复换行符和 ascii 铃声到以前的

脚本可以运行但会失败: \badstyle{w}\badstyle{o}\badstyle{r}\badstyle{d} 它将变成: wo}rd}

分支到 :f 似乎不起作用。

F=$(sed 's|\\|\\\\|g;s|{|\\{|g' <<< "$1"  )

# mark all removestrings with ascii bell and newline
# add newline after each { and }  
SEDpre='
s|'"$F"'|\a%\n|g

s|\{|\{\n|g
s|\}|\}\n|g
'


SEDpost='
:a;N;$!ba;
s|\a%\n||g

s|\{\n|\{|g
s|\}\n|\}|g
'

# count the brackets
SED='
/\a%/{
:a
        n
:f
        /\{/{x;s|$|X|;x;ba}
        /\}/{x;
                s|X||;
                /^$/{x;bb}
                x
                ba
            }
}
b
:b  
/\}/{   
    s|\}||;
    N;
    s|\n||;
    /\a%/bf
     }
'

sed -r -E  "$SEDpre"  "$2"  | sed -rE "$SED"  | sed -rE "$SEDpost" 
text-processing
  • 5 个回答
  • 529 Views
Martin Hope
Luke
Asked: 2024-12-16 23:42:36 +0800 CST

从 PDF 中提取目录

  • 5

我有一个相当大的个人图书馆,里面有各种格式的书籍。我尝试整理它们的元数据,包括包含目录的文本字段。目前,我正在使用文档阅读器中的“区域文本选择”功能来复制文本。使用 djview 对 DJVU 执行此操作可生成格式良好的目录,如下所示:

CONTENTS
1. EXPERIMENTS
1.1. The definition of an experiment ..... 1
1.2. Algebras of events as Boolean algebras .... 6
1.3. Operations with experiments ...... 9
1.4. Canonical representation of polynomials of events . . 12
....

我强调,我所做的只是将鼠标拖过页面并单击“复制文本”。如果我尝试对 PDF 执行此操作,结构将完全丢失,我必须花一些时间清理文本选择,移动页码和章节编号。我可能会得到如下结果:

Table of Contents
I
 Introduction
1
 Introduction
1.1
 Table of Contents
1.2
 Acknowledgments
1
3
3
6
II
....

我正在寻找一款可以以类似的方式复制文本但保留“结构”的 PDF 阅读器。DJVU 阅读器具有此功能,这告诉我这应该是可能的。

注意:我不是在谈论从书签中提取目录:我的许多 PDF 都没有目录。我还想避免使用必须处理整个文件的 CLI 工具:我只希望它选择我选择的文本,但保留换行符和整体结构。

text-processing
  • 2 个回答
  • 26 Views
Martin Hope
Vlado B.
Asked: 2024-12-13 17:47:33 +0800 CST

更新另一个 JSON 对象中的数组内的对象

  • 8

我有一个巨大的 JSON 对象,里面有一个对象数组。我必须将键:值对添加到数组中的特定对象。例如,让输入对象为:

{
  "a": {
    "b": [
      {
        "name": "name1",
        "value": 1,
        "param": {
          "p1": "par1"
        }
      },
      {
        "name": "name2",
        "value": 2,
        "param": {
          "p1": "par2"
        }
      },
      {
        "name": "name3",
        "value": 3,
        "param": {
          "p1": "par3"
        }
      }
    ],
    "c": 4,
    "d": 5
  }
}

使用索引,修改很容易:

 jq '.a.b[0].param += {new: "QQQ"}'

但我不能 100% 确定索引。我必须用名称标签指定对象.name == "name1"。

如何修改名称标签所标识的对象?

text-processing
  • 2 个回答
  • 23 Views
Martin Hope
learningregularexpressions
Asked: 2024-12-09 02:35:46 +0800 CST

如何将底线与前一行合并?

  • 6

我有一个非常基本的文件;

15
Chapter name


some text and some more text
some text and some more text

我试图得到这样的东西

Book: 15 Chapter name


some text and some more text
some text and some more text

我尝试使用 sed 和这种模式来做到这一点;

sed 's/^\([[:digit:]]\+\)\n\([[:alpha:]].*$\)\n$/Book: \1 \2\n/g'

显然,这在终端上不起作用,但是在 VIM 版本中可以完美运行sed。

text-processing
  • 3 个回答
  • 50 Views
Martin Hope
Avenger
Asked: 2024-12-07 03:19:34 +0800 CST

如何在带有 BOM 的 UTF-8 文件的第一行之前插入文本

  • 5

这个问题与如何在文件第一行前插入文本?密切相关。我故意将标题设为与该问题相似以突出这一点。

除非目标文件是带有BOM的UTF-8。

因此,我想在文件的第一行中添加一个标题(0xef 0xbb 0xbf字符)中包含 UTF-8 BOM 字节的文件。至少我这里的 UTF-8 带 BOM 文件以此开头。

如果我继续按照相关问题中的解决方案进行操作,

sed "1i My First line is now this." file.txt

我将得到类似这样的结果(在我的情况下是 VSCode)

My First line is now this.
?The first line was this one
Second line and so on

第二行的 UTF-8 字符用来?表达一些不可打印的内容。

正如我们所料,另一个结果是文件不再以带 BOM 的 UTF-8 格式打开,我们现在依靠文本编辑器功能来“猜测”其编码。我们在项目中确定了一种模式,即使用带 BOM 的文件来确保所有内容都采用相同的编码。

如何在添加文本时保留文件中的 BOM 头?

text-processing
  • 2 个回答
  • 42 Views
Martin Hope
Lurch
Asked: 2024-12-06 16:47:42 +0800 CST

删除包含部分字符串匹配的行

  • 6

我有 2 个文件

文件1

00:00:00:00:00:01

文件2

00:00:00:00:00:02 foo bar
00:00:00:00:00:01 something else

我想要做的是比较这两个文件,并00:00:00:00:00:01从文件 2 中删除,这样我最终得到

文件 2

00:00:00:00:00:02 foo bar

我试过

grep -Fvx file1 file2

但它似乎不适用于部分线匹配。

text-processing
  • 1 个回答
  • 59 Views
Martin Hope
Matteo
Asked: 2024-11-25 21:34:48 +0800 CST

使用 AWK 复制列并用制表符分隔它们

  • 7

我有一个大文件,其格式tab如下:

#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  recombination
chr1    586001  >63041388>63041391      G       A       60      .       AC=80;AF=0.3125;AN=256;AT=>63041388>63041390>63041391,>63041388>63041389>63041391;NS=3;LV=0     GT    1|2|3|

现在,最后一列(第 10 列)出现的数字等于用竖线除以 0 |;但是,我希望实现以下目标:

#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  recombination
chr1    586001  >63041388>63041391      G       A       60      .       AC=80;AF=0.3125;AN=256;AT=>63041388>63041390>63041391,>63041388>63041389>63041391;NS=3;LV=0     GT    1|1    2|2    3|3

tab我设法通过替换符号来分隔列|,这让我知道如何复制它们并添加|数字之间的数字。我尝试了几次for循环,但我能做的最好的就是只打印两列,如下所示:

1    1
2    2
3    3
...

否则printf我会得到一行输出但不能保持计数器与初始列相同的值...非常感谢任何帮助,提前谢谢!

text-processing
  • 2 个回答
  • 163 Views
Martin Hope
Ronnie
Asked: 2024-11-06 01:28:27 +0800 CST

在 RTF 文件的文件路径列表中,根据每个文件名出现的次数对输出进行计数和排序

  • 6

我有一个 RTF 文件,其中包含 pdf 文件路径列表。例如

Category1:
./Folder1/Folder2/1.pdf:18
./Folder3/2.pdf:18
./Folder5/4.pdf:10

Category2:
./Folder3/2.pdf:18
./Folder5/4.pdf:10

Category3:
./Folder1/Folder2/1.pdf:18
./Folder5/4.pdf:10

Category4:
./Folder6/7.pdf:10
./Folder5/4.pdf:10
./Folder3/2.pdf:18

附注: *.pdf:num 后面的数字 num 可以忽略。文件夹的完整路径也可以忽略。感兴趣的实体只是文件的名称.pdf

我想要一个按 pdf 名称及其出现次数排序的输出

输出格式为(文件名:文件在 rtf 中出现的次数),例如:

4.pdf :  4
2.pdf :  3

注2:任何提及次数少于3次的文件都可以被忽略。

text-processing
  • 4 个回答
  • 65 Views

Sidebar

Stats

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

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve