linux - 用两条新线替换一条线

标签 linux shell unix scripting

我有一个名为 abc.csv 的文件,其中包含以下 6 行:

xxx,one
yyy,two
zzz,all
aaa,one
bbb,two
ccc,all

现在,无论何时 all 出现在一行中,该行都应该​​被 onetwo 替换,即:

xxx,one
yyy,two
zzz,one
zzz,two
aaa,one 
bbb,two
ccc,one
ccc,two

有人可以帮助如何做到这一点吗?

最佳答案

$ 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

关于linux - 用两条新线替换一条线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18258117/

相关文章:

linux - Fortran 90 不写入标准输出?

linux - 如何从当前引用时间开始计算时间

file - 使用另一种语言的 magic.mgc

linux - 为什么 Imake 将 Imakefile 中的某些单词解释为数值?

c - gcc 用 .s 文件编译 .c - .bss 混淆(错误?)

linux - ltrace()如何显示rand()

linux - 如何在非 Windows 操作系统的 WiX 安装程序中获取操作系统名称?

shell - 如何在shell脚本中将十进制值打印为十六进制值

bash - Expect、Bash 和 kpcli

ruby - 使用 Ruby 命令行的类似 Awk 的 BEGIN 和 END