我有一个45999行的文本文件。每行都有一个单词(unigram)。我想创建两个连续的单词(二元语法)。例如:
apple
pie
red
vine我想要'apple pie', 'pie red', 'red vine'。我尝试使用sed 'N;s/\n/ /',但它只创建了“苹果派”和“红藤”。我该如何解决这个问题?谢谢。。
发布于 2019-10-13 17:02:10
如果你对awk没意见,你可以试着关注一下吗?
awk -v RS="" '
BEGIN{
OFS=","
s1="\047"
}
{
for(i=2;i<=NF;i++){
print s1 $(i-1) s1, s1 $i s1
}
}' Input_file输出如下所示。
'apple','pie'
'pie','red'
'red','vine'第二个解决方案:,因为OP的输出不清楚,所以也添加这个。
awk -v RS="" '
BEGIN{
OFS=","
s1="\047"
}
{
for(i=2;i<=NF;i++){
val=(val?val OFS:"")s1 $(i-1) s1 OFS s1 $i s1
}
}
END{
print val
}' Input_file输出如下所示。
'apple','pie','pie','red','red','vine'发布于 2019-10-14 01:22:57
这可能适用于您(GNU sed):
sed -nE 'N;s/\n(.*)/ \1&/;P;D' file将下一行追加到当前行,然后将换行符替换为空格,然后再次追加第二行。打印/删除第一行,然后重复。
注意:这不会打印最后一行,因为它不是一对,如果需要最后一行,请使用:
sed -E 'N;s/\n(.*)/ \1&/;P;D' file如果要将输出打印为单行,其中每一行都用单引号括起来并用逗号分隔,请使用:
sed -E ':a;$!N;s/(\S+)\n(.*)/'\''\1 \2'\'', \2/;ta;s/ (\S+)$/ '\''\1'\''/' file或者:
sed -E ':a;$!N;s/(\S+)\n(.*)/'\''\1 \2'\'', \2/;ta;s/, \S+$/' filehttps://stackoverflow.com/questions/58362010
复制相似问题