Bash-如何从一个文件中查找行作为另一文件中的行的一部分?

现在

我有两个文件:

1.txt

/stackoverflow.com/questions
/stackoverflow.com/reports
/stackoverflow.com/answers

2.txt

/stackoverflow.com/questions/18959800/grep-each-line-from-a-file-in-another-file
/stackoverflow.com/answers/18984800/grep-each-line-from
/stackoverflow.com/questions/20559800/line-from-a-file-in-another-file
/stackoverflow.com/ask/9959800/file-in-another-file-second_line

如果来自1.txt的行是来自2.txt的行的一部分,请打印此行。如果2.txt中的一行不匹配,请打印此行。

我想要这样的output.txt文件:

output.txt:

/stackoverflow.com/questions/
/stackoverflow.com/reports/
/stackoverflow.com/answers/
/stackoverflow.com/ask/9959800/file-in-another-file-second_line

可以将所有行放在一个文件中:

/stackoverflow.com/questions
/stackoverflow.com/reports
/stackoverflow.com/answers
/stackoverflow.com/questions/18959800/grep-each-line-from-a-file-in-another-file
/stackoverflow.com/answers/18984800/grep-each-line-from
/stackoverflow.com/questions/20559800/line-from-a-file-in-another-file 
/stackoverflow.com/ask/9959800/file-in-another-file-second_line
RavinderSingh13

编辑:由于OP已添加了来自先前Input_file的行,因此也需要编辑解决方案,如下所示。

awk 'FNR==NR{a[$0]=$0;next} {for(i in a){if(match($0,a[i])){print substr($0,RSTART,RLENGTH);b[i]=i;next}};print;} END{for(k in a){if(b[k]==""){print a[k]}}}' 1.txt 2.txt

现在也添加非单一衬里形式的解决方案。

awk '
FNR==NR{
  a[$0]=$0;
  next}
{
  for(i in a){
    if(match($0,a[i])){
      print substr($0,RSTART,RLENGTH);
      b[i]=i;
      next}};
    print}
END{
  for(k in a){
    if(b[k]==""){
      print a[k]}}
}
' 1.txt 2.txt

您能否尝试遵循并让我知道这是否对您有帮助。

awk 'FNR==NR{a[$0]=$0;next} {for(i in a){if(match($0,a[i])){print substr($0,RSTART,RLENGTH);next}};print}' 1.txt 2.txt

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用bash将一个文件中的行剪切为另一文件中明确指出的长度

查找文件的一行,提取其中的一部分并替换在 Bash 中的同一位置

Bash-在同一文件中查找并替换为新行

如何在bash shell中grep文件的一部分

一个bash脚本,用于连接字符串并使用bash脚本在同一文件中编辑一行

Bash-从一个文件中删除行,同时遍历另一个文件中的行

从Bash中另一个更大的文件中查找文件行的最快方法

Bash:如何从for循环中的多个文件的数组中删除目录的第一部分?

简化sed表达式以将文件中的行的一部分保存到变量中(bash)

在XML文件中使用bash查找并替换字符串的一部分

在bash中获取列表的一部分

在编写Bash脚本时,如何创建然后以日期作为名称一部分的文件?

如何使用bash脚本删除文件名的一部分

如何使用bash脚本选择txt文件的一部分?

从一个文件中删除另一文件中的行

从 bash 中删除与另一个文件中的行匹配的 CSV 文件中的行?

从一个文件中查找不在另一文件行中的字符串

如何从bash中的不同输出保存在同一文件的两列中

如何在Bash中获得http链接的最后一部分?

如何在 bash shell 中使用查找结果作为正则表达式的一部分

如何使用 Bash 删除一行的一部分并保留其余部分?

一个bash脚本,用于将文件夹的所有文件复制到Desktop中的唯一文件夹

重命名文件,删除文件名bash脚本的一部分

BASH读了一行,但只评估了一部分

从一行到另一行提取到具有行号的单独文件作为bash中的变量

BASH-如何删除文本文件中的所有数字,除非它们是特定字符串的一部分?

如何在bash脚本中收集第二行输出的第一部分并设置为变量

Bash:如何从文件中获取一些行并将输出保存到另一个文件

如何在BASH中查找和替换文件每一行中的最后一个空格?