【问题标题】:How to extract text from large text [duplicate]如何从大文本中提取文本[重复]
【发布时间】:2019-06-01 07:49:31
【问题描述】:

我在 FILE1.txt 中有这种格式的数据

@E/f1/w/ @H/abc/w/ @demo/file/wk/Fil0.fk
@E/f2/w/ @H/cdv/w/ @demo/file/wk/Fil1.fk
@E/f3/w/ @H/efg/w/ @demo/file/wk/Fil2.fk
@E/f4/w/ @H/mno/w/ @demo/file/wk/Fil3.fk
@E/f5/w/ @H/pqr/w/ @demo/file/wk/Fil4.fk

我想将数据打印到文件中...... FILE2.txt 采用以下格式

Fil0.fk
Fil1.fk
Fil2.fk
Fil3.fk
Fil4.fk

【问题讨论】:

  • 正如 Ulrich 在您的 other question(和 here)中所问的那样,请选择一种编程语言或通用文本处理工具。作为新用户,请使用tour,同时阅读How to Ask
  • 你怎么能不从你的其他问题中得到,你只需要增加 / 的数量就可以了!?

标签: linux bash


【解决方案1】:

欢迎来到 StackOverflow。

我假设您想将第一列和第二列保存在新文件中。

您必须在 FILE1.txt 所在的路径中创建如下所示的 bash,使用 chmod +x <bash_file_name> 命令将其更改为可执行文件并通过 ./<bash_file_name> 运行它

#!/bin/bash

input="FILE1.txt"
while IFS= read -r line
do
    # Extract file name
    filename=`echo "$line" | awk '{print $3}' | cut -d'/' -f4`

    # Extract data
    clumnOne=`echo "$line" | awk '{print $1}'`
    clumnTwo=`echo "$line" | awk '{print $2}'`

    # Write to file
    echo "$clumnOne $clumnTwo" >> $filename
done < "$input"

【讨论】:

  • 它给了我这个错误... f.sh: line 28: $filename: ambiguous redirect
  • 阿里提供的脚本只有16行。第 28 行不可能出现错误。您需要显示您的代码,并清楚说明您遇到问题的位置。
  • 这是因为您可能更改了脚本供您使用,请出示您的脚本和文本文件以便解决。
【解决方案2】:

始终显示您尝试过的内容。

假设文件名x

cut:

$: cut -d/ -f 10 x

sed:

$: sed 's#^.*/##' x

awk:

$: awk  ' { gsub("^.*/",""); print; }' x

bash:

$: while read line; do echo "${line//*\/}"; done < x

【讨论】:

  • 太棒了兄弟!感谢按预期工作
  • 但是你还是应该先努力。有人对我投了反对票,可能是因为我完全给出了答案,而且他们没有错……请始终努力。
猜你喜欢
  • 2012-08-31
  • 2019-12-16
  • 2019-06-29
  • 1970-01-01
  • 1970-01-01
  • 2018-11-04
  • 2014-07-11
  • 2011-01-18
相关资源
最近更新 更多