次のようなファイルがあります:
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