Linux 我在bash代码中使用awk语句时遇到一些困难

Linux 我在bash代码中使用awk语句时遇到一些困难,linux,bash,shell,awk,scripting,Linux,Bash,Shell,Awk,Scripting,我试图检查某些值(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 &&

我试图检查某些值(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
type=$(awk'NR==1{

对于(i=1;i您可以在打印
1
一次后调用
exit

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)
type=$(awk'NR==1{

对于(i=1;i如果您正在使用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
read-ra字段<“$PWD/file.txt”
对于“${FIELDS[@]:1}”中的
中的“$A”格
DIC | IC | RNDIC)
# 
打破
;;
以撒
完成

函数是类型1{
本地字段A
读取-ra字段<“$1”
对于“${FIELDS[@]:1}”中的
中的“$A”格
DIC | IC | RNDIC)
返回0
;;
以撒
完成
返回1
}
如果是_type1“$PWD/file.txt”,则
# 
fi
注意:我只是使用了
case
,因为我不知道bash的版本,而且
extglob
可能会很麻烦

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