我是unix命令的新手。我有一个名为server.txt的文件,它有100个字段,文件的第一行是标题。
我想看一下99和100的字段。
字段99只是一些数字,字段100是字符串。
每个字段的分隔符,它是一个空格。
我的目标是通过grep和regex提取字符串(field100)中的每个标记, 然后使用field99输出从String中提取的每个标记, 并跳过我的记录的前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]+/|
答案 0 :(得分: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 <= 1000
,其中NR
是当前行号。如果条件为真,则next
操作将跳至下一个输入行。否则,我们会进入下一个没有条件的表达式;因此,对于到达此处的所有输入线,它都是不完整的。它首先清除第100个字段值周围的双引号,然后将空格分割为数组a
。然后for
循环遍历此数组,打印第99个字段值和数组的v
元素,从v=1
开始直到数组末尾。
输入文件格式有点麻烦。使用稍微更合理的输入格式可以避免gsub
和split
内容。如果您是awk
的新手,您应该去寻找一个教程。
如果您只想学习一种脚本语言,我会建议awk
以上的Perl或Python,但这取决于您的计划和方向。