列の先頭と末尾に文字を追加する

列の先頭と末尾に文字を追加する

次のファイルがあります。

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 -F@ -v OFS=@ '
    function quote(x) {return sprintf("\"%s\"", x)}
    {print quote($1), $2, quote($3), $4}
'

答え3

私の考えでは、奇妙なソリューションおそらくより良いかもしれませんが、次のものを使用できますsed

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

答え4

awkから:最初の3つのフィールドの周りに引用符を追加し、その行を印刷します。

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

-F @フィールド区切り記号をに設定します@。このループは最初の3フィールドの周りに引用符を追加します。最後のprint(省略形print $0)は、変更されたフィールドを含む行を印刷します。個々のフィールド(、、、…)が変更されるたびに書き換えられます$0$1$2

関連情報