首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多个条件的nawk空格修剪

具有多个条件的nawk空格修剪
EN

Stack Overflow用户
提问于 2014-05-12 22:50:21
回答 2查看 220关注 0票数 0

temp_file.txt

代码语言:javascript
复制
|112233456543214 |
|154233456873221|
|154233456868320|

当我使用下面的nawk命令时,我看到数据正在跳过,如果你有空格,所以我必须修剪空白.I必须在下面的命令中包括空白修剪(知道单独使用nwak命令),这是我的challenge.The问题是如何在下面的命令中包括空白修剪

代码语言:javascript
复制
nawk -F '|' 'BEGIN{FS=OFS="|"}(length($2) >=13){
  $2=substr($2,1,6)"xxxxxx"substr($2,length($2)-3)}1' temp_file.txt>tmp.txt && mv tmp.txt temp_file.txt
EN

回答 2

Stack Overflow用户

发布于 2014-05-12 23:23:36

因为第一个字符是一个管道,所以您的$1将始终是一个空字符串。您想要检查$2中的数据。

代码语言:javascript
复制
awk -F\| -v OFS=\| '{gsub(/(^[[:blank:]]+)|([[:blank:]]+$)/, "", $2)} 1' <<END
|112233456543214 |
|  154233456873221  |
| 154233456868320|
END
代码语言:javascript
复制
|112233456543214|
|154233456873221|
|154233456868320|

如果您使用的是-F,则不需要在BEGIN块中定义FS。

如果你想把它拼写出来:

代码语言:javascript
复制
$ nawk -F '|' '
    BEGIN {OFS = FS}
    function obfuscate(string) {
        gsub(/(^[[:blank:]]+)|([[:blank:]]+$)/, "", string)
        return substr(string,1,6) "xxxxxx" substr(string,length(string)-3)
    }
    length($2) >= 13 {$2 = obfuscate($2) }
    1
' <<END
|112233456543214 |
|  154233456873221  |
|123456789012|
|1234567890123|
|12345678901234|
| 154233456868320|
END
代码语言:javascript
复制
|112233xxxxxx3214|
|154233xxxxxx3221|
|123456789012|
|123456xxxxxx0123|
|123456xxxxxx1234|
|154233xxxxxx8320|
票数 3
EN

Stack Overflow用户

发布于 2014-05-13 00:31:55

FS定义中,nawk支持正则表达式。您可以使用此选项来修剪前导和尾随空格或制表符。

代码语言:javascript
复制
nawk -F '[[:blank:]]*[|][[:blank:]]*' 'BEGIN{OFS = "|"} (length($2) >= 13) {
    $2 = substr($2, 1, 6) "xxxxxx" substr($2, length($2) - 3)}1'

管道由方括号包围,以防止它充当正则表达式交替运算符。正则表达式表示使用零个或多个空格(空格或制表符)的组合,后跟一个竖线字符,然后使用零个或多个空格作为字段分隔符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23612226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档