awk - 在RS之前打印数据,同一行

时间:2013-12-24 00:04:44

标签: awk

我有一个输出,我正在输入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之前的所有数据。

过去三天我一直在寻找解决方案,但还没有找到解决方案。

提前谢谢。

3 个答案:

答案 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" ..

之外,没有任何部分被剥离