我有一个这样的文件:
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