簡體   English   中英

在 csv 上使用#text awk/sed

[英]awk/sed on csv with #text

我是這里的新手,所以任何方向都會有所幫助。 有一個 csv 文件(逗號分隔),並且在其中一列中有用 # 符號分隔的文本(該列本身用 # 分隔)。 這是一行的示例:

text,text devicetype,cidr,text#more text#XXXX|more
text#even more text#more
text#text_toreplace#text|text#text

text_toreplace 是我想要用不同的文本替換的內容,而不更改列中值為“text#more text#XXXX|more text#even more text#more text#text_toreplace#text|text#text”的數據的所有 rest

CSV 確實有第一個 raw 作為標題,之后會有多行。

示例 output 與由 # 限定的 coumn 和一個值差異完全相同:

text,text devicetype,cidr,text#more text#XXXX|more
text#even more text#more
text#REPLACED_TEXT#text|text#text

想法

使用#作為“主要”字段分隔符,遍歷字段以替換有問題的文本。

awk -F'#' -v OFS='#' '{
    for (i=1; i<=NF; i++)
        if ($i == "text_toreplace")
            $i = "REPLACED_TEXT"
    print
}' <<'END_INPUT'
text,text devicetype,cidr,text#more text#XXXX|more
text#even more text#more
text#text_toreplace#text|text#text
END_INPUT
text,text devicetype,cidr,text#more text#XXXX|more
text#even more text#more
text#REPLACED_TEXT#text|text#text

使用sed會更容易

$ sed -E 's/(^|#)(text_toreplace)(#|$)/\1REPLACED_TEXT\3/g' file

匹配第一個和最后一個字段所需的錨點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM