【问题标题】:text manipulation using unix commands only仅使用 unix 命令进行文本操作
【发布时间】:2016-11-22 18:34:54
【问题描述】:

我有一个任务需要解析文件并提取信息。我可以使用 bash 轻松做到这一点,但我只能通过 unix 命令来完成。

例如,我有一个类似如下的文件:

 Set<tab>one<tab>two<tab>three
 Set<tab>four<tab>five<tab>six
 ENDSET

 Set<tab>four<tab>two<tab>nine
 ENDSET

 Set<tab>one<tab>one<tab>one
 Set<tab>two<tab>two<tab>two
 ENDSET

 ...

如此等等。我希望能够提取一定数量的集合,比如前 10 个。另外,我希望能够从列中提取信息。

再一次,使用 bash 脚本来做这件事是一件微不足道的事情,但我不确定如何仅使用 unix 命令来做到这一点。我可以在 shell 脚本中将这些命令组合在一起,但同样只能使用 unix 命令。

【问题讨论】:

  • Unix 命令是什么意思? awk 是 Unix 命令吗?还有python ?
  • 我想我可以通过 sed、awk 甚至 perl 进行管道传输,因为这是我能想到的唯一方法,而无需通过例如脚本实际编写出来。重击。不幸的是,我只是,在所有这些方面。
  • 你会如何“使用 bash”?这与使用“仅 unix 命令”几乎相同。
  • 我的意思是在文件上运行 cat 然后以这种方式解析它,可能使用中间文件但没有 shell 脚本
  • 我不知道你想要什么。你有什么想要的输出吗?

标签: shell parsing unix text-manipulation


【解决方案1】:

没有输出示例,很难知道您的目标,但无论如何,您可以使用的一个 UNIX 命令是 AWK。

例子:

从您的数据样本中提取 2 个集合(不包括“ENDSET”或空行):

$ awk '/ENDSET/{ if(++count==2) exit(0);next; }NF{print}' file.txt
Set     one     two     three
Set     four    five    six
Set     four    two     nine

提取 3 个 sets 并仅打印第 2 列(注意第 1 列始终为“Set”):

$ awk '/ENDSET/{ if(++count==3) exit(0);next; }$2{print $2}' file.txt
two
five
two
one
two

等等……(更多信息:$ man awk

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多