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

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

次のようなファイルがあります:

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 の場合: 最初の 3 つのフィールドを引用符で囲み、行を出力します。

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

-F @フィールド区切り@文字を に設定します。ループは最初の 3 つのフィールドを引用符で囲みます。最後print( の省略形print $0) は変更されたフィールドを含む行を出力します。個々のフィールド ( 、、…) が変更される$0たびに が再構築されます。$1$2

関連情報