我需要文件中模式之间的数据
文件中的数据如下
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
我正在尝试查找文件的最后一个行号 然后在第1行和最后一行号之间运行一个循环 然后运行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
答案 0 :(得分:0)
您可以先使用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
然后进行进一步的比较
请注意,在第一行数据之前有一个空行
答案 1 :(得分:0)
这是一个可以帮助的骨架脚本:
cat file1 | while read line; do
# echo " --read $line"
if [ "$goahead" = "yes" ]; then
while true; do
if [[ "$line" == \#* ]]; then
echo "break on marker $line"
break
else
echo " process line: $line"
fi
read line
# echo " read $line"
if [ -z "$line" ]; then break; fi
done
fi
if [[ "$line" == \#* ]]; then
echo "start on marker $line"
goahead="yes"
fi
done
输出与您的数据(但我的标题各不相同)是:
start on marker # Wed 06-02-2017
process line: field1=abc
process line: field2=xyz
process line: field3=ijk
break on marker # Wed 07-02-2017
start on marker # Wed 07-02-2017
process line: field1=123
process line: field2=456
process line: field3=789
break on marker # Wed 08-02-2017
start on marker # Wed 08-02-2017
process line: field1=a1a
process line: field2=c1c
process line: field3=d1d