gpt4 book ai didi

bash - 如果列为空,awk 打印一些东西

转载 作者:行者123 更新时间:2023-12-05 08:19:04 25 4
gpt4 key购买 nike

我正在尝试一个脚本,其中文件 [ file.txt ] 有很多列,例如

abc|pqr|lmn|123
pqr|xzy|321|azy
lee|cha| |325
xyz| |abc|123

我想使用 awk 命令在 bash 脚本中获取列列表,如果列为空,则应打印 blank 否则打印列值

我已经尝试了以下可能性,但它不起作用

cat file.txt | awk -F "|" {'print $2'} | sed -e 's/^$/blank/' // Using awk and sed
cat file.txt | awk -F "|" '!$2 {print "blank"} '
cat file.txt | awk -F "|" '{if ($2 =="" ) print "blank" } '

请告诉我如何使用 awk 或任何其他 bash 工具来做到这一点。

谢谢

最佳答案

我想你要找的是

awk -F '|' '{print match($2, /[^ ]/) ? $2 : "blank"}' file.txt

match(str, regex) 返回正则表达式第一个匹配项在 str 中的位置,如果没有匹配项则返回 0。所以在这种情况下,如果字段 2 中有一些非空白字符,它将返回一个非零值。请注意,在 awk 中,字符串中第一个字符的索引是 1,而不是 0。

在这里,我假设您只对单个列感兴趣。

如果您希望能够从 bash 变量指定替换字符串,最好的解决方案是使用 -v 开关将 bash 变量传递到 awk 程序中:

awk -F '|' -v blank="$replacement" \
'{print match($2, /[^ ]/) ? $2 : blank}' file.txt

这种机制避免了转义元字符的问题。

关于bash - 如果列为空,awk 打印一些东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31602467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com