[英]How do I split a linefeed delimited string in awk and use its output on the same command line in bash?
[英]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.