我正在尝试检查某些值(DIC,IC,RNDIC)是否在文本文件的第一行中,但不在第一列中。缝下所有细节。并不是说文本文件中的每个字段都是表格式的。
file.txt的
NO DIC IC RNDIC FI BO CF
---
1 2 3 4 5 6
这是我必须处理此文件的代码:
type=$(awk 'NR==1 {
for (i = 1; i <= NF; i++)
{
if (i != 1 && ($i == "DIC" || $i == "IC" || $i == "RNDIC"))
print "1"
}
}' $PWD/file.txt)
if [[ $type == "1" ]]; then
# rest of the code is irrelevant
fi
echo $type
问题是它在if
初始化后永远不会进入$type
语句。原因是$type
实际上是1 1
而不是1
。我意识到我犯的错误是if
循环中的for
声明,但我不知道如何修复它。有什么建议?感谢。
如果需要进一步说明,请告诉我。
答案 0 :(得分:1)
您可以在打印exit
一次后致电1
:
type=$(awk 'NR==1 {
for (i = 1; i <= NF; i++) {
if (i != 1 && ($i == "DIC" || $i == "IC" || $i == "RNDIC")) {
print "1"
exit
}
}
}' $PWD/file.txt)
答案 1 :(得分:1)
如果您使用bash,则无需分叉并依赖awk:
read -ra FIELDS < "$PWD/file.txt"
for A in "${FIELDS[@]:1}"; do
case "$A" in
DIC|IC|RNDIC)
# <do some things>
break
;;
esac
done
或者
function is_type1 {
local FIELDS A
read -ra FIELDS < "$1"
for A in "${FIELDS[@]:1}"; do
case "$A" in
DIC|IC|RNDIC)
return 0
;;
esac
done
return 1
}
if is_type1 "$PWD/file.txt"; then
# <do some things>
fi
注意:我刚使用case
,因为我不知道bash的版本,extglob
可能很麻烦。