我有一个输入文件,其列由|分隔如下。
[3yu23yuoi]|$name
!$fjkdjl|[kkklkl]
$hjhj|$mmkj
我希望输出为
0 $name
!$fjkdjl 0
$hjhj $mmkj
每当字符串以$或!$或"任何"开头时,我希望它以其他方式打印0。 我尝试了以下命令。它只打印与输入文件相同的内容。
awk -F="|" '{if (($1 ~ /^.*\$/) || ($1 ~ /^.*\!$/) || ($1 ~ /^any/)) {print $1} else if ($1 ~ /^\[.*/){print "0"} else if (($2 ~ /^.*\$/) || ($2 ~ /^.*\!$/) || ($2 ~ /^any/)) {print $2} else if($2 ~ /^\[.*/){print "0"}}' input > output
答案 0 :(得分:1)
这应该做:
awk -F\| '{$1=$1;for (i=1;i<=NF;i++) if ($i!~/^(\$|!\$|any)/) $i=0}1' file
0 $name
!$fjkdjl 0
$hjhj $mmkj
如果数据不是以$
!$
或any
开头,请将其设为0
或者如果您喜欢tab作为分隔符:
awk -F\| '{$1=$1;for (i=1;i<=NF;i++) if ($i!~/^(\$|!\$|^any)/) $i=0}1' OFS="\t" file
0 $name
!$fjkdjl 0
$hjhj $mmkj
$1=$1
确保所有行都具有相同的输出,即使没有更改数据。