0

我是 unix 命令的新手。我有一个名为 server.txt 的文件,它有 100 个字段,文件的第一行是标题。

我只想看看 99 和 100 的字段。

字段 99 只是一些数字,字段 100 是一个字符串。

每个字段的分隔符是一个空格。

我的目标是通过 grep 和正则表达式提取字符串(field100)中的每个标记,然后使用从字符串中提取的每个标记使用 field99 输出,并跳过我记录的前 1000 行

----server.txt--
... ...   ,field99,field100
... ...    5,"hi are"
... ...    3,"how is"

-----output.txt
header1,header2
5,hi
5,are
3,how
3,is

所以我只是有一些想法,但我不知道如何组合所有脚本

以下是我的一些想法:

sed 1000d server.txt cut -f99,100  -d' ' >output.txt
grep | /[A-Za-z]+/| 
4

1 回答 1

1

听起来更像是一份工作awk

awk -F, 'NR <= 1000 { next; }
  { gsub(/^\"|\"$/, "", $100); split($100, a, / /);
    for (v=1; v<=length(a); ++v) print $99, a[v]; }' server.txt >output.txt

程序的一般形式awk是一系列condition { action }表达式。第一行的条件NR <= 1000NR当前行号。如果条件为真,则next操作跳到下一个输入行。否则,我们将进入下一个没有条件的表达式;因此,对于到达此处的所有输入行,它都是无条件的。它首先清除第 100 个字段值周围的双引号,然后将其按空格拆分为数组a。然后for循环遍历这个数组,打印第 99 个字段值和数组的v第 th 个元素,从数组v=1末尾开始一直向上。

输入文件格式有点麻烦。可以通过稍微更理智的输入格式来避免andgsub东西。split如果您是新手awk,您可能应该去寻找教程。

如果您只想学习一种脚本语言,我建议您使用 Perl 或 Python awk,但这取决于您的计划和方向。

于 2012-09-06T17:31:49.987 回答