【发布时间】:2013-11-27 12:50:55
【问题描述】:
我在比较同一文件的两列然后根据另一列替换一列的值时遇到问题
例如,我的文件是这样的:
name col1 col2
abc no no
xyz yes yes
man no no
wrr no no
在这里,我想检查文件 col1 中的每个“否”值,我想将 col2 的值更改为“N/A”
【问题讨论】:
我在比较同一文件的两列然后根据另一列替换一列的值时遇到问题
例如,我的文件是这样的:
name col1 col2
abc no no
xyz yes yes
man no no
wrr no no
在这里,我想检查文件 col1 中的每个“否”值,我想将 col2 的值更改为“N/A”
【问题讨论】:
$ awk '$2=="no"{$3="N/A"}1' file
name col1 col2
abc no N/A
xyz yes yes
man no N/A
wrr no N/A
【讨论】:
1 最后做了什么?
{print} 放在可读性上,但我试图尽可能简洁。
这是一个 awk 问题:
cat your-file.txt | awk '{if ( $2 == "no" ) { $3 = "N/A"; } print $0 }' > your-new-file.txt
【讨论】:
cat 即使您使用多个管道也很少有用;)
这是一个简单的解决方案:
while read name col1 col2 ; do
if[[ "$col" = no ]]; then
echo "$name $col1 N/A"
else
echo "$name $col1 $col2"
fi
done < file
如果您需要更快,请使用此awk 脚本:
$1 == "no" { print $1" "$2" N/A"; next; }
{ print; }
【讨论】:
使用sed:
[ ~]$ sed "s/\([A-Za-z]*\ *no\ *\).*/\1N\/A/g" file
name col1 col2
abc no N/A
xyz yes yes
man no N/A
wrr no N/A
使用awk:
[ ~]$ awk '$2 == "no" {$3="N/A"} {print}' file
name col1 col2
abc no N/A
xyz yes yes
man no N/A
wrr no N/A
您还可以根据需要更改显示:
[ ~]$ awk '$2 == "no" {$3="N/A"} {print $1"\t"$2"\t"$3}' file
[ ~]$ awk '$2 == "no" {$3="N/A"} {print $1" "$2" "$3}' file
# ...
【讨论】: