我有一个名为abc.csv
的文件,其中包含以下6行:
xxx,one
yyy,two
zzz,all
aaa,one
bbb,two
ccc,all
现在每当all
出现在该行中时,该行应由one
和two
替换,即:
xxx,one
yyy,two
zzz,one
zzz,two
aaa,one
bbb,two
ccc,one
ccc,two
有人可以帮忙怎么做?
答案 0 :(得分:1)
$ awk -F, -v OFS=, '/all/ { print $1, "one"; print $1, "two"; next }1' foo.input
xxx,one
yyy,two
zzz,one
zzz,two
aaa,one
bbb,two
ccc,one
ccc,two
如果您想坚持使用仅限shell的解决方案:
while read line; do
if [[ "${line}" = *all* ]]; then
echo "${line%,*},one"
echo "${line%,*},two"
else
echo "${line}"
fi
done < foo.input
答案 1 :(得分:0)
在sed
:
sed '/,all$/{ s/,all$/,one/p; s/,one$/,two/; }'
当该行与最后的,all
匹配时,首先将all
替换为one
并打印出来;然后用one
替换two
并让自动打印进行打印。