Spi*_*ike 3 awk shell-script cut
文件 ( myfile.txt
) 包含如下数据:
abc#ab1=23
nrt#
#clb1aX
amd#322
Run Code Online (Sandbox Code Playgroud)
期望输出:
abc
nrt
clb1ax
amd
Run Code Online (Sandbox Code Playgroud)
我可以这样做,
for i in `cat myfile.txt`
do
s1=`echo $i | cut -d'#' -f1`;
s2=`echo $i | cut -d'#' -f2`;
if [ "$s1" == "" ]; then
echo "$s2"
else
echo "$s1"
fi;
done;
Run Code Online (Sandbox Code Playgroud)
不过反正是有做到这一点,而无需使用for
和if
,就像使用awk
或sed
或cut
或单行其他什么东西?
简短的awk
解决方案:
awk -F'#' 'NF{ print ($1 != "" ? $1 : $2) }' file
Run Code Online (Sandbox Code Playgroud)
输出:
abc
nrt
clb1aX
amd
Run Code Online (Sandbox Code Playgroud)