linux - 如何对文件中的每一行运行 grep 命令?

标签 linux bash csv grep

我有一个名为 adrese.csv 的文件,其中包含另一个名为 rezultate2.txt 的文件的第一行。例如:

www.afahc.ro/ro/rcic/simpozion/Simpozion_13/first_call.html    
www.anmb.ro/ro/files/bric/mars_bric_2008/corespondente.html
www.anmb.ro/ro/files/bric/mars_bric_2011/corespondente.html
www.anmb.ro/ro/files/bric/mars_bric_2015/corespondente.html
www.anmb.ro/ro/files/bric/mars_bric_2017/corespondente.html
www.anmb.ro/ro/files/erasmus/parteneriate.html   
www.anmb.ro/ro/files/studenti/ccoc/1/obiective.html
www.anmb.ro/ro/files/studenti/ccoc/2/servicii.html
www.anmb.ro/ro/files/studenti/ccoc/3/aspecte.html

文件rezultate2.txt除了这些第一行之外还包含一批文本,其中包含单词“放弃”。我需要对 rezultate2.txt 上以 adrese.csv 中的字符串开头的每一行运行 grep -E -o ".{0,50}abandon.{0,50}" 并将所有内容输出到文件(最好是 CSV)。我尝试了不同的命令,但没有任何效果。

示例rezultate2.txt

2345678abcd www.utm.ro/proiecte-europene/despre-pos-dru/index.html-
www.utm.ro/proiecte-europene/despre-pos-dru/index.html:Axa prioritară 2 finanţează activităţi care urmăresc facilitarea tranziţiei de la şcoală la viaţa activă prin dezvoltarea de programe integrate de orientare şi consiliere în carieră şi prin sprijinirea parteneriatelor între şcoli, universităţi şi întreprinderi; prevenirea şi corectarea fenomenului de părăsire timpurie a şcolii prin programe integrate pentru prevenirea abandonului şcolar, încurajarea participării şcolare şi reintegrarea celor care au părăsit şcoala timpuriu; creşterea accesului şi participării la formare profesională continuă prin diversificarea programelor de formare profesională continuă şi sprijinirea participării angajaţilor la astfel de programe.

www.utm.ro/proiecte-europene/despre-pos-dru/index.html-

Axa Prioritară 3 “Creşterea adaptabilităţii lucrătorilor şi a întreprinderilor”

12345678abcd www.utm.ro/posdru141699.1-
www.utm.ro/posdru141699.1: Axa prioritară 2 finanţează activităţi care urmăresc facilitarea tranziţiei de la şcoală la viaţa activă prin dezvoltarea de programe integrate de orientare şi consiliere în carieră şi prin sprijinirea parteneriatelor între şcoli, universităţi şi întreprinderi, prevenirea şi corectarea fenomenului de părăsire timpurie a şcolii prin programe integrate pentru prevenirea abandonului şcolar, încurajarea participării şcolare şi reintegrarea celor care au părăsit şcoala timpuriu, creşterea accesului şi participării la formare profesională continuă prin diversificarea programelor de formare profesională continuă şi sprijinirea participării angajaţilor la astfel de programe. www.utm.ro/posdru141699.1- 12345678abcd www.utm.ro/posdru141699/index.html-
www.utm.ro/posdru141699/index.html: Axa prioritară 2 finanţează activităţi care urmăresc facilitarea tranziţiei de la şcoală la viaţa activă prin dezvoltarea de programe integrate de orientare şi consiliere în carieră şi prin sprijinirea parteneriatelor între şcoli, universităţi şi întreprinderi, prevenirea şi corectarea fenomenului de părăsire timpurie a şcolii prin programe integrate pentru prevenirea abandonului şcolar, încurajarea participării şcolare şi reintegrarea celor care au părăsit şcoala timpuriu, creşterea accesului şi participării la formare profesională continuă prin diversificarea programelor de formare profesională continuă şi sprijinirea participării angajaţilor la astfel de programe. www.utm.ro/posdru141699/index.html- 12345678abcd www.utm.ro/posdru141699/Despre_POSDRU.html-
www.utm.ro/posdru141699/Despre_POSDRU.html: Axa prioritară 2 finanţează activităţi care urmăresc facilitarea tranziţiei de la şcoală la viaţa activă prin dezvoltarea de programe integrate de orientare şi consiliere în carieră şi prin sprijinirea parteneriatelor între şcoli, universităţi şi întreprinderi, prevenirea şi corectarea fenomenului de părăsire timpurie a şcolii prin programe integrate pentru prevenirea abandonului şcolar, încurajarea participării şcolare şi reintegrarea celor care au părăsit şcoala timpuriu, creşterea accesului şi participării la formare profesională continuă prin diversificarea programelor de formare profesională continuă şi sprijinirea participării angajaţilor la astfel de programe. www.utm.ro/posdru141699/Despre_POSDRU.html- 12345678abcd www.utm.ro/en/proiecte-europene/despre-pos-dru/index.html- www.utm.ro/en/proiecte-europene/despre-pos-dru/index.html:Axa prioritară 2 finanţează activităţi care urmăresc facilitarea tranziţiei de la şcoală la viaţa activă prin dezvoltarea de programe integrate de orientare şi consiliere în carieră şi prin sprijinirea parteneriatelor între şcoli, universităţi şi întreprinderi; prevenirea şi corectarea fenomenului de părăsire timpurie a şcolii prin programe integrate pentru prevenirea abandonului şcolar, încurajarea participării şcolare şi reintegrarea celor care au părăsit şcoala timpuriu; creşterea accesului şi participării la formare profesională continuă prin diversificarea programelor de formare profesională continuă şi sprijinirea participării angajaţilor la astfel de programe.

www.utm.ro/en/proiecte-europene/despre-pos-dru/index.html-

Axa Prioritară 3 “Creşterea adaptabilităţii lucrătorilor şi a întreprinderilor”

所需的输出是一个文件,其中包含 adrese.csv 中的行及其相应的文本,其中仅包含单词“abandon”及其左右各 50 个字符:

www.utgjiu.ro/despre/index.html?p=5400放弃中逐渐减少人口。 Nevoia unor sisteme dereferinşa este, poate, ma

<小时/>

在 friend 的帮助下,我得到了我需要的东西。下面的 Python 脚本由 Radu Eosif Mihăilescu 编写:

#!/usr/bin/python

"""Custom work for Razvan T. Coloja, placed in the public domain by the author.
"""

import sys

MAGIC_WORD = 'abandon'

def main(argv):
    with open(argv[1], 'r') as faddr:
        addresses = set(l.rstrip() for l in faddr)
    with open(argv[2], 'r') as fres:
        the_text = set(l.rstrip() for l in fres)

    for address in addresses:
        for line in the_text:
            if line.startswith(address):
                where_found = line.find(MAGIC_WORD)
                if where_found != -1:
                    if where_found > 50:
                        start_excerpt = where_found - 50
                    else:
                        start_excerpt = 0
                    print '"%s","%s"' % (
                        address,
                        line[start_excerpt:where_found + len(MAGIC_WORD) + 50])


if __name__ == '__main__':
    main(sys.argv)

最佳答案

如果我正确理解了您想要实现的目标(在 adrese.csv 上为 rezultate2.txt 中带有“abandon”的每一行运行 grep),则以下代码片段应该可以做到这一点:

grep -E -o ".{0,50}abandon.{0,50}" rezultate2.txt | while read LINE ; do
  grep "$LINE" adrese.csv >> output.csv
done

关于linux - 如何对文件中的每一行运行 grep 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47369815/

相关文章:

python - 在 Python 中读取文件时有没有办法跳到特定的行号?

java - 如何从 csv 返回特定数据?

linux - awk 并行运行吗?

linux - shell:当 var 未设置或为 null 时,${var:-} 的用途是什么?

linux - 如何处理数千个文件夹。需要将每个x文件夹移动到新文件夹

c - 如何在c中将变量整数添加到csv的文件名

regex - 为什么这个正则表达式不能在 linux 上使用 find 命令

c++ - xterm 终止后进程被杀死

linux - 用于更改符号链接(symbolic link)指向的位置的脚本

linux - 如何使用 'cp' 命令排除特定目录?