如何打印具有基于分隔符的值的第一个字段

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)

不过反正是有做到这一点,而无需使用forif,就像使用awksedcut或单行其他什么东西?

Rom*_*est 8

简短的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)