temp_file.txt
|112233456543214 |
|154233456873221|
|154233456868320|
当我使用下面的nawk命令时,我看到数据正在跳过,如果你有空的空间,所以我必须修剪空白区域。我必须在下面的命令中包含空格修剪(知道使用nwak命令这就是挑战。我的问题是如何在下面的命令中包含空格修剪
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
答案 0 :(得分:3)
因为第一个字符是管道,所以$1
将始终为空字符串。您想要检查$2
的数据。
awk -F\| -v OFS=\| '{gsub(/(^[[:blank:]]+)|([[:blank:]]+$)/, "", $2)} 1' <<END
|112233456543214 |
| 154233456873221 |
| 154233456868320|
END
|112233456543214|
|154233456873221|
|154233456868320|
如果您正在使用-F
,则无需在BEGIN块中定义FS。
如果你想要拼写出来:
$ 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
|112233xxxxxx3214|
|154233xxxxxx3221|
|123456789012|
|123456xxxxxx0123|
|123456xxxxxx1234|
|154233xxxxxx8320|
答案 1 :(得分:0)
nawk
支持FS
定义中的正则表达式。您可以使用它来修剪前导和尾随空格或制表符。
nawk -F '[[:blank:]]*[|][[:blank:]]*' 'BEGIN{OFS = "|"} (length($2) >= 13) {
$2 = substr($2, 1, 6) "xxxxxx" substr($2, length($2) - 3)}1'
管道被方括号包围,以防止它充当正则表达式交替运算符。正则表达式说使用零个或多个空格(空格或制表符)的组合,后跟一个管道字符,后跟零个或多个空格作为字段分隔符。