合并双引号中的多行单元格

问题描述 投票:0回答:1

我有这个 tsv(制表符分隔)文件,有 2 列。 第一列是单个(或一组)单词,第二列是它的含义。

测试文件

test    try
test    "a short exam to measure somebody's knowledge 
or skill in something."
testing examine

我正在尝试合并第二行和第三行,因为它用双引号引起来。例如

预期输出

test    try
test    "a short exam to measure somebody's knowledge or skill in something."
testing examine

我试过这个:

awk -v FS='\t' -v OFS='\t' '{print $1, $2}' test.tsv
test    try
test    "a short exam to measure somebody's knowledge
or skill in something."
testing examine

但它不会合并第 2 行和第 3 行。我尝试了“partsplit”并将所有行合并在一起。

awk 'BEGIN { FS=OFS="\t"}
{
    if (patsplit($0,a,/"[^"]+"/,s)) {
        gsub(/\n/,"",a[1])
        printf "%s%s%s", s[0],a[1],s[1]
    }
    else
        printf "%s", $0
    printf ";"
}' test.tsv

我需要像原始文件一样保持制表符分隔格式。唯一需要的更改是将文本合并在 2 个双引号中。

regex awk sed grep
1个回答
0
投票

当第二个字段以双引号开头时,您可以将输出记录分隔符设置为空字符串,当记录以双引号结尾时,再次将其设置为换行符:

awk -F'\t' '$2~/^"/{ORS=""}/"$/{ORS="\n"}1'

演示:https://awk.js.org/?snippet=nEx499

© www.soinside.com 2019 - 2024. All rights reserved.