2014-04-03 39 views
2

我有nawk命令,我需要根據長度格式化數據。所有的時間我需要保留前6位數字和最後4位數字,並在中間生成xxxx。可以幫助微調以下腳本nawk命令中的多個條件

#!/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中

"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的

"X"|"ST"|"245552544555201"|"245552xxxxx5201" 
"Y"|"VT"|"245652544555200"|"245652xxxxx5200" 
"X"|"ST"|"3445625445552023"|"344562xxxxxx2023" 
"Y"|"VT"|"24532254455524"|"245322xxxx5524" 
+0

如果你正在尋找一個代碼審查,頭http://codereview.stackexchange.com/ –

回答

1

試試這個:

$ 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" 
+0

這有助於THX很多 – Senthil

+0

如果我需要在輸入文件劫持數列具有相同的邏輯如何這是我的輸入文件,但在輸出文件中沒有變化 「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「 11-11「| 75.00」3「|」Y「|」S「|」VT「|」24532254455524「|」1111-11-11「| 95.00 此外,我無法找到刻度標記來回答正確 – Senthil

+0

對不起,我是新用戶。我編輯了輸入和o utput文件。我將在下一個問題中改進得更好 – Senthil