2014-03-25 24 views
0

我正在嘗試編寫腳本來捕獲和屏蔽特定列。我需要清除文本的4列,並且還將其掩蓋在輸出文件中。我不確定如何屏蔽同一列捕獲特定列和屏蔽列

請幫助我重寫以下命令或新命令

input.txt 
--------- 
AA | BB | CC | 123456 

output.txt 
--------- 
BB | 123456 | 12xx56 

劇本我寫

cat input.txt | nawk -F '|' '{print $2 "|" $4 "|" $4} >output.txt 
+0

第4列的值是否總是6個字符?如果不是,那麼編輯您的示例以表明您期望與其他尺寸發生的事情。祝你好運。 – shellter

+0

第4列的值是固定長度,總是6個字符 – user3326101

回答

0
nawk -F '|' '{print $2 "|" $4 "|" substr($4, 1,3) "xx" substr($4,6,2)}' input.txt > output.txt 

輸出

BB | 123456| 12xx56 

假設你並不真正需要的開頭和結尾的空格,我會做

echo "AA | BB | CC | 12345678" \ 
| awk -F '|' '{gsub(/ */, "", $0) 
    #dbg print "length$4=" (length($4)-4) 
    masking=sprintf("%"(length($4)-4)"s", " ") ; gsub(/ /, "x", masking) 
    print $2 "|" $4 "|" substr($4, 1,2) masking substr($4,(length($4)-1),2) 
}' 

BB|12345678|12xxxx78 

我使用echo "..."

nawk -F '|' '{gsub(/ */, "", $0);print $2 "|" $4 "|" substr($4, 1,2) "xx" substr($4,5,2)}' input.txt > output.txt 

cat output.txt 
BB|123456|12xx56 

最終解決方案簡化測試過程。你可以把它取出來,用input.txt > output.txt代替,並且可以像以前一樣工作。

我已經添加了(length($4)-1),使得在$ 4動態的第二個字符到最後一個字符的位置,基於單詞$ 4的長度。

IHTH

+0

是的。在你用xx屏蔽的命令中,我需要屏蔽該列以屏蔽 – user3326101

+0

讓我們假設列不固定,我需要保留最後一行2位數字和輸出中的前2位數字應該是xxxxxx然後命令是什麼 – user3326101