繁体   English   中英

如何使用sed或awk在分隔行上检查空白字段

[英]How do I check for blank fields on a delimited line with sed or awk

我正在使用bash脚本解析源输入文件。 我正在文件中生成定界输出。 我需要一种方法来检查定界输出的每个字段是否已填充。 例如,AA,BB,3,4,5,6,7,8是好的,而AA ,, 3,4,5,6,,8是不好的。 如何使用sed / awk或可以放入bash脚本的其他工具检查一行中是否有空白字段? 提前致谢!

用bash:

string='AA,,3,4,5,6,,8'
if [[ $string =~ ^,|,,|,$ ]]; then
  echo "error"
else
  echo "okay"
fi

输出:

error

您可以使用以下命令打印带有至少一个空白字段的行:

awk -F, '{for (i=1;i<=NF;i++) if ($i=="") {print; next}}'
  • -F,将字段定界符设置为,

  • for (i=1;i<=NF;i++)遍历字段

  • if ($i=="") {print; next} if ($i=="") {print; next}打印记录,如果被测试的字段为空,并进入下一个记录

例:

% cat file.txt                                                   
AA,BB,3,4,5,6,7,8
AA,,3,4,5,6,,8

% awk -F, '{for (i=1;i<=NF;i++) if ($i=="") {print; next}}' file.txt
AA,,3,4,5,6,,8

您可以使用符合您要求的重复组对正则表达式进行测试:

grep -E '^([^,]+,)*[^,]$' <<< "${AA,,3,4,5,6,,8}"

测试代码:

for str in "AA,BB,3,4,5,6,7,8" "AA,,3,4,5,6,,8" ; do
echo "==========="
   echo "Testing >>>${str}<<<"
   grep -Eq '^([^,]+,)*[^,]$' <<< "${str}" || echo "String incorrect"
done

您可以使用以下命令从文件中grep错误行

grep -vE '^([^,]+,)*[^,]$' inputfile

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM