Linux 用两条新线替换一条线

Linux 用两条新线替换一条线,linux,shell,unix,scripting,Linux,Shell,Unix,Scripting,我有一个名为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 有人能帮我怎么做吗 $ awk -F, -v OFS=, '/all/ { print $1, "one"; print $1, "two"; ne

我有一个名为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
有人能帮我怎么做吗

$ 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
读行时
;做
如果[[“${line}”=*all*];然后
回显“${line%,*},一”
回显“${line%,*},两个”
其他的
回显“${line}”
fi
完成
sed
中:

sed '/,all$/{ s/,all$/,one/p; s/,one$/,two/; }'

当行与
匹配时,结尾处的所有
,首先用
one
替换
all
,并将其打印出来;然后将
one
替换为
two
,让自动打印进行打印。

当读取行执行echo$line时,如果[“
echo$line | awk-F,{print$2}”
“=”all”],则执行echo“
echo$line | awk-F,{print$1}
,一个“echo”
echo$line | awk-F,{print$1},两个”fi完成$()
),但我在回答中添加了一个shell解决方案。这是否回答了您的问题?