我需要文件中模式之间的数据
文件中的数据如下

cat file1
# Wed 06-02-2017
field1=abc
field2=xyz
field3=ijk
# Wed 06-02-2017
field1=123
field2=456
field3=789
# Wed 06-02-2017
field1=a1a
field2=c1c
field3=d1d

我想运行循环,在第一个循环中找到模式第一次和第二次出现之间的数据,然后在第二个循环中,我想要模式第二次和第三次出现之间的数据,依此类推。
下面是为相同的代码编写的,但它不起作用
cat caturedata
#!/bin/sh

lastlineno=$(wc -l file1 | awk {'print$1'})
echo $lastlineno
for (( i=1;i<=$lastlineno;i=a))
do
        echo "Inside Loop : $i"
        sed '"$i",/#/d;/#/,$d' file1
        temp=$(sed '"$i",/#/d;/#/,$d' file1 | wc |awk '{print $1}')
        a=i+temp+1
done

我在找文件的最后一行号码
然后在第一行和最后一行之间运行循环
然后运行sed命令以捕获模式第一次出现行号和第二次出现行号之间的数据
然后确定下一个行号以开始
输出应如下
Inside Loop : 1
field1=abc
field2=xyz
field3=ijk
Inside Loop : 5
field1=123
field2=456
field3=789
Inside Loop : 9
field1=a1a
field2=c1c
field3=d1d

最佳答案

您可以首先使用awk合并由# Wed xx-xxx-2017分割的同一块:

awk '{if($0 !~ /^#/){printf",%s",$0} else {printf "\n%s",$0}}' xxx.txt

# Wed 06-02-2017,field1=abc,field2=xyz,field3=ijk
# Wed 06-02-2017,field1=123,field2=456,field3=789
# Wed 06-02-2017,field1=a1a,field2=c1c,field3=d1d

然后做进一步的比较
注意,在第一行数据之前有一个空行

关于linux - 在循环中捕获第一次和第二次出现模式之间的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42061985/

10-12 18:01
查看更多