將字元加入列的開頭和結尾

將字元加入列的開頭和結尾

我有一個這樣的文件:

78@54@this@15@23
65@22@is@92@16
34@12@an@14@18
13@42@example@52@22

我想把它改成這樣:

"78"@54@"this"@15@23
"65"@22@"is"@92@16
"34"@12@"an"@14@18
"13"@42@"example"@52@22

我已經為此苦苦掙扎了很長時間,但我不明白該怎麼做。如有任何幫助,我們將不勝感激,謝謝。

答案1

你可以嘗試 awk:

echo "78@54@this@15@23
65@22@is@92@16
34@12@an@14@18
13@42@example@52@22" |
awk -F@ '{print "\""$1"\"@"$2"@\""$3"\"@"$4"@"$5}' 

"78"@54@"this"@15@23
"65"@22@"is"@92@16
"34"@12@"an"@14@18
"13"@42@"example"@52@22

答案2

有點冗長,但我會寫這篇 awk:

awk -F@ -v OFS=@ '
    function quote(x) {return sprintf("\"%s\"", x)}
    {print quote($1), $2, quote($3), $4}
'

答案3

我認為一個awk解決方案可能更好,但您也可以使用sed

sed -r 's/(\d+)@(\d+)@(\w+)(.*)/"\1"@\2@"\3"\4/' /path/to/your/file

答案4

在 awk 中:在前三個欄位周圍新增引號,然後列印該行。

awk -F @ '{for (i = 1; i <= 3; i++) $i = "\"" $i "\""; print}'

-F @將欄位分隔符號設定為@。該循環在前三個字段周圍添加引號。最後一個print( 的縮寫print $0)列印包含修改欄位的行;每當個別字段( 、、 ...)更改$0時都會重建。$1$2

相關內容