首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nawk命令中的多条件

nawk命令中的多条件
EN

Stack Overflow用户
提问于 2014-04-03 20:25:18
回答 1查看 100关注 0票数 2

我有nawk命令,在这里我需要根据长度.All格式化数据,需要保持前6位和最后4位的时间,并将xxxx放在中间。您能帮助微调下面的脚本吗?

代码语言:javascript
复制
#!/bin/bash 
FILES=/export/home/input.txt

           cat $FILES | nawk -F '|' '{
           if (length($3) >= 13  )
             print $1 "|" $2 "|" substr($3,1,6) "xxxxxx" substr($3,13,4) "|" $4"|" $5 
           else 
             print $1 "|" $2 "|" $3 "|" $4 "|" $5"|
           }' > output.txt 
done

input.txt

代码语言:javascript
复制
"2"|"X"|"A"|"ST"|"245552544555201"|"1111-11-11"|75.00 
"6"|"Y"|"D"|"VT"|"245652544555200"|"1111-11-11"|95.00 
"5"|"X"|"G"|"ST"|"3445625445552023"|"1111-11-11"|75.00 
"3"|"Y"|"S"|"VT"|"24532254455524"|"1111-11-11"|95.00

output.txt

代码语言:javascript
复制
"X"|"ST"|"245552544555201"|"245552xxxxx5201"
"Y"|"VT"|"245652544555200"|"245652xxxxx5200"
"X"|"ST"|"3445625445552023"|"344562xxxxxx2023"
"Y"|"VT"|"24532254455524"|"245322xxxx5524"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-03 20:35:51

试试这个:

代码语言:javascript
复制
$ awk '
BEGIN {FS = OFS = "|"}
length($5)>=13 {
    fld5=$5
    start = substr($5,1,7)
    end = substr($5,length($5)-4)
    gsub(/./,"x",fld5)
    sub(/^......./,start,fld5)
    sub(/.....$/,end,fld5)
    $1=$2; $2=$4; $3=$5; $4=fld5; NF-=3;       
}1' file
"X"|"ST"|"245552544555201"|"245552xxxxx5201"
"Y"|"VT"|"245652544555200"|"245652xxxxx5200"
"X"|"ST"|"3445625445552023"|"344562xxxxxx2023"
"Y"|"VT"|"24532254455524"|"245322xxxx5524"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22848261

复制
相关文章

相似问题

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