gpt4 book ai didi

shell - 在 awk 中修剪字符串的前导和尾随空格

转载 作者:行者123 更新时间:2023-12-03 01:53:55 24 4
gpt4 key购买 nike

我正在尝试删除以下input.txt第二列中的前导和尾随空格:

名称、订单
修剪,工作
猫,cat1

我使用下面的awk来删除第二列中的前导和尾随空格,但它不起作用。我错过了什么?

awk -F, '{$2=$2};1' input.txt

输出如下:

名称、订单
修剪,工作
猫,cat1

前导空格和尾随空格不会被删除。

最佳答案

如果您想修剪所有空格,仅在有逗号的行中,并使用 awk,那么以下内容将适合您:

awk -F, '/,/{gsub(/ /, "", $0); print} ' input.txt

如果您只想删除第二列中的空格,请将表达式更改为

awk -F, '/,/{gsub(/ /, "", $2); print$1","$2} ' input.txt

请注意,gsub 在作为第三个参数的变量中将 // 中的字符替换为第二个表达式 - 并且这样做就地 - 换句话说,完成后,$0(或 $2)已被修改。

完整说明:

-F,            use comma as field separator 
(so the thing before the first comma is $1, etc)
/,/ operate only on lines with a comma
(this means empty lines are skipped)
gsub(a,b,c) match the regular expression a, replace it with b,
and do all this with the contents of c
print$1","$2 print the contents of field 1, a comma, then field 2
input.txt use input.txt as the source of lines to process

编辑我想指出@BMW的解决方案更好,因为它实际上仅使用两个连续的gsub命令修剪前导和尾随空格。在给予认可的同时,我将解释它是如何工作的。

gsub(/^[ \t]+/,"",$2);    - starting at the beginning (^) replace all (+ = zero or more, greedy)
consecutive tabs and spaces with an empty string
gsub(/[ \t]+$/,"",$2)} - do the same, but now for all space up to the end of string ($)
1 - ="true". Shorthand for "use default action", which is print $0
- that is, print the entire (modified) line

关于shell - 在 awk 中修剪字符串的前导和尾随空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20600982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com