Shell 带多个条件的nawk空格修剪
temp_file.txtShell 带多个条件的nawk空格修剪,shell,unix,nawk,Shell,Unix,Nawk,temp_file.txt |112233456543214 | |154233456873221| |154233456868320| 当我使用下面的nawk命令时,我看到如果你有空白,数据将跳过,因此我必须修剪空白。我必须在下面的命令中包含空白修剪(知道如何单独使用nwak命令),这是一个挑战。我的问题是如何在下面的命令中包含空白修剪 nawk -F '|' 'BEGIN{FS=OFS="|"}(length($2) >=13){ $2=substr($2,1,6)"xxxxxx
|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
因为第一个字符是管道,所以
$1
将始终是空字符串。您想检查$2
中的数据
awk -F\| -v OFS=\| '{gsub(/(^[[:blank:]]+)|([[:blank:]]+$)/, "", $2)} 1' <<END
|112233456543214 |
| 154233456873221 |
| 154233456868320|
END
如果使用的是-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
因为第一个字符是管道,所以
$1
将始终是空字符串。您想检查$2
中的数据
awk -F\| -v OFS=\| '{gsub(/(^[[:blank:]]+)|([[:blank:]]+$)/, "", $2)} 1' <<END
|112233456543214 |
| 154233456873221 |
| 154233456868320|
END
如果使用的是-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
因为第一个字符是管道,所以
$1
将始终是空字符串。您想检查$2
中的数据
awk -F\| -v OFS=\| '{gsub(/(^[[:blank:]]+)|([[:blank:]]+$)/, "", $2)} 1' <<END
|112233456543214 |
| 154233456873221 |
| 154233456868320|
END
如果使用的是-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
因为第一个字符是管道,所以
$1
将始终是空字符串。您想检查$2
中的数据
awk -F\| -v OFS=\| '{gsub(/(^[[:blank:]]+)|([[:blank:]]+$)/, "", $2)} 1' <<END
|112233456543214 |
| 154233456873221 |
| 154233456868320|
END
如果使用的是-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
nawk
在FS
的定义中支持正则表达式。可以使用此选项修剪前导和尾随空格或制表符
nawk -F '[[:blank:]]*[|][[:blank:]]*' 'BEGIN{OFS = "|"} (length($2) >= 13) {
$2 = substr($2, 1, 6) "xxxxxx" substr($2, length($2) - 3)}1'
管道被方括号包围,以防止其充当正则表达式替换操作符。正则表达式表示使用零个或多个空格(空格或制表符)加上管道字符,再加上零个或多个空格作为字段分隔符。
nawk
在FS
的定义中支持正则表达式。可以使用此选项修剪前导和尾随空格或制表符
nawk -F '[[:blank:]]*[|][[:blank:]]*' 'BEGIN{OFS = "|"} (length($2) >= 13) {
$2 = substr($2, 1, 6) "xxxxxx" substr($2, length($2) - 3)}1'
管道被方括号包围,以防止其充当正则表达式替换操作符。正则表达式表示使用零个或多个空格(空格或制表符)加上管道字符,再加上零个或多个空格作为字段分隔符。
nawk
在FS
的定义中支持正则表达式。可以使用此选项修剪前导和尾随空格或制表符
nawk -F '[[:blank:]]*[|][[:blank:]]*' 'BEGIN{OFS = "|"} (length($2) >= 13) {
$2 = substr($2, 1, 6) "xxxxxx" substr($2, length($2) - 3)}1'
管道被方括号包围,以防止其充当正则表达式替换操作符。正则表达式表示使用零个或多个空格(空格或制表符)加上管道字符,再加上零个或多个空格作为字段分隔符。
nawk
在FS
的定义中支持正则表达式。可以使用此选项修剪前导和尾随空格或制表符
nawk -F '[[:blank:]]*[|][[:blank:]]*' 'BEGIN{OFS = "|"} (length($2) >= 13) {
$2 = substr($2, 1, 6) "xxxxxx" substr($2, length($2) - 3)}1'
管道被方括号包围,以防止其充当正则表达式替换操作符。正则表达式要求使用零个或多个空格(空格或制表符)和管道字符的组合以及零个或多个空格作为字段分隔符。问题是如何在命令nawk-F'|''BEGIN{FS=OFS=“|”}(长度($1)>=13){$1=substr($1,1,6)“xxxxxx”substr($1,长度($1)-3)中包含修剪1'temp_file.txt>tmp.txt&&mv tmp.txt temp_file.txtDone。使用
tmp=$(mktemp)
而不是“tmp.txt”,或者您可以使用OP的BEGIN
赋值并省略-F
。您的第一个示例显示了“x”替换,但您忽略了执行此操作的功能。感谢@DennisWilliamson,糟糕的剪切粘贴问题是如何在命令nawk-F'|''BEGIN{FS=OFS=“|”}(length($1)>=13){$1=substr($1,1,6)“xxxxxx”substr($1,length($1)-3)}1'temp_file.txt>tmp.txt&&mv tmp.txt temp_file.txtDone。使用tmp=$(mktemp)
而不是“tmp.txt”,或者您可以使用OP的BEGIN
赋值并省略-F
。您的第一个示例显示了“x”替换,但您忽略了执行此操作的功能。感谢@DennisWilliamson,糟糕的剪切粘贴问题是如何在命令nawk-F'|''BEGIN{FS=OFS=“|”}(length($1)>=13){$1=substr($1,1,6)“xxxxxx”substr($1,length($1)-3)}1'temp_file.txt>tmp.txt&&mv tmp.txt temp_file.txtDone。使用tmp=$(mktemp)
而不是“tmp.txt”,或者您可以使用OP的BEGIN
赋值并省略-F
。您的第一个示例显示了“x”替换,但您忽略了执行此操作的功能。感谢@DennisWilliamson,糟糕的剪切粘贴问题是如何在命令nawk-F'|''BEGIN{FS=OFS=“|”}(length($1)>=13){$1=substr($1,1,6)“xxxxxx”substr($1,length($1)-3)}1'temp_file.txt>tmp.txt&&mv tmp.txt temp_file.txtDone。使用tmp=$(mktemp)
而不是“tmp.txt”,或者您可以使用OP的BEGIN
赋值并省略-F
。您的第一个示例显示了“x”替换,但您忽略了执行此操作的功能。谢谢@DennisWilliamson,糟糕的剪切'n'paste@DenisThx。我尝试应用相同的命令,但我看不出有效果。它跳过了“x”替换logic@Senthil字体它对我有用。您的nawk
是什么版本?我的是/usr/bin/nawk->/etc/alternations/nawk->/usr/bin/gawk
,这可能解释了它的工作原理。然而,Sunnawk
手册页说FS
支持正则表达式。格伦·杰克曼的例子对你有用吗?(或者这是他的第一个例子,完全缺少“x”替换,这给你带来了问题,而不是我的问题)@Denis Thx。我尝试应用相同的命令,但我看不出效果。它跳过了“x”替换logic@Senthil字体它对我有用。您的nawk
是什么版本?我是/usr/bin/nawk->/etc/alternations/nawk->/usr/bin