Linux 用两条新线替换一条线
我有一个名为abc.csv的文件,其中包含以下6行: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
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解决方案。这是否回答了您的问题?