我有一个输出,我正在输入awk并在某些行的末尾找到一个好的RS字符串。 但是当我将尾随字符串定义为RS时,awk只删除整行内容。我希望保留RS字符串的数据,并且只从该行中删除RS。
awk的示例输入:
data data data RS_STRING
data SEARCHED_STRING data data
data data
data data data RS_STRING
data data data
data data
data data data RS_STRING
data SEARCHED_STRING data data
data data
来自awk的所需输出:
data data data
data SEARCHED_STRING data data
data data
data data data
data SEARCHED_STRING data data
data data
我目前的awk语法是:
awk '/SEARCHED_STRING/' RS = "RS_STRING"
......我得到了:
data SEARCHED_STRING data data
data data
data SEARCHED_STRING data data
data data
正如您所看到的那样,将RS_STRING定义为RS,awk会删除该行中包含的RS之前的所有数据。
过去三天我一直在寻找解决方案,但还没有找到解决方案。
提前谢谢。
答案 0 :(得分:1)
将空行使用awk作为记录分隔符
awk 'BEGIN{RS="";FS="RS_STRING"}
/SEARCHED_STRING/{$1=$1;print $0 ORS}' file
如果记录之间没有空行,并且RS_STRING始终位于记录的第一行,请尝试以下操作:
awk '/RS_STRING/{i++}{a[i]=a[i]==""?$0:a[i]RS $0}
END{for (j=1;j<=i;j++) if (a[j]~/SEARCHED_STRING/) print a[j]}' file
答案 1 :(得分:1)
非awk答案
perl -00 -ne '/SEARCHED_STRING/ and do {s/RS_STRING//g; print}'
使用搜索字符串搜索段落并删除“rs”字符串。
答案 2 :(得分:0)
它对我有用:
echo "ab RS_STRING cd" | awk '{print "NR="NR ": \""$0"\""}' RS="RS_STRING"
给出输出
NR=1: "ab "
NR=2: " cd
"
如您所见,除了字符串"RS_STRING"
..