我有一个包含许多文件的文件夹,其中包含以下文字:
blabla
chargeableDuration 00 01 03
...
timeForStartOfCharge 14 55 41
blabla
...
blabla
calledPartyNumber 123456789
blabla
...
blabla
callingPartyNumber 987654321
我需要输出如:
987654321 123456789 145541 000103
我一直在尝试跟随awk:
awk -F '[[:blank:]:=,]+' '/findstr chargeableDuration|dateForStartOfCharge|calledPartyNumber|callingPartyNumber/ && $4{
if (calledPartyNumber != "")
print dateForStartOfCharge, "NIL"
dateForStartOfCharge=$5
next
}
/calledPartyNumber/ {
for(i=1; i<=NF; i++)
if ($i ~ /calledPartyNumber/)
break
print chargeableDuration, $i
chargeableDuration=""
}' file
无法使其发挥作用。请帮忙。
答案 0 :(得分:0)
假设你有一个名为“test.txt”的文件,linux shell命令下面会为你工作。
<p>The colour is: <span id=hai></span></p>
<button id="btn" onclick="change()">Change!</button>
答案 1 :(得分:0)
非常像Manishs回答:
tac test_regex.txt | grep -oP '(?<=chargeableDuration|timeForStartOfCharge|calledPartyNumber|callingPartyNumber)\s+([^\n]+)' | tr -d " \t\r\f" | tr "\n" " "
唯一的区别是,您保留前面的顺序而不是排序结果。因此,对于您的示例,两个解决方案都会产生相同的输出,但最终可能会产生不同的结果。
答案 2 :(得分:0)
awk '/[0-9 ]+$/{
x=substr($0,( index($0," ") + 1 ) );
gsub(" ","",x);
a[$1]=x
}
END {
split("callingPartyNumber calledPartyNumber timeForStartOfCharge chargeableDuration",b," ");
for (i=1;i<=4;i++){
printf a[(b[i])]" "
}
}'
/[0-9 ]+$/
:查找以数字/无空格分隔的数字行。
x=substr($0,( index($0," ") + 1 ) )
:在$ 0中第一个空格匹配后获取索引,并将第一个空格匹配后的子字符串(即数字)保存到变量x
gsub(" ","",x)
:删除x
a[$1]=x
:创建一个索引为a
的数组$0
并为其指定x
END
:
split("callingPartyNumber calledPartyNumber timeForStartOfCharge chargeableDuration",b," ")
:创建数组b
,其中索引1,2,3和4按您需要的顺序具有所需字段的值
for (i=1;i<=4;i++){
printf a[(b[i])]" "
}
:for循环获取数组a
中的值,索引为数组b[1],b[2],b[3]
中的值和b[4]