Linux Bash脚本Awk条件

Linux Bash脚本Awk条件,linux,bash,shell,awk,Linux,Bash,Shell,Awk,我对此代码有问题。。我不知道我必须写什么作为用awk剪切文件的条件 i=0 while [ $i -lt 10 ]; #da 1 a 9, Ap1..Ap9 do case $i in 1) RX="54:75:D0:3F:1E:F0";; 2) RX="54:75:D0:3F:4D:00";; 3) RX="54:75:D0:3F:51:50";; 4) RX="54:75:D0:3F:53:60";

我对此代码有问题。。我不知道我必须写什么作为用awk剪切文件的条件

i=0    
while [ $i -lt 10 ]; #da 1 a 9, Ap1..Ap9
    do

      case $i in
        1) RX="54:75:D0:3F:1E:F0";;
        2) RX="54:75:D0:3F:4D:00";;
        3) RX="54:75:D0:3F:51:50";;
        4) RX="54:75:D0:3F:53:60";;
        5) RX="54:75:D0:3F:56:10";;
        6) RX="54:75:D0:3F:56:E0";;
        7) RX="54:75:D0:3F:5A:B0";;
        8) RX="54:75:D0:3F:5F:90";;
        9) RX="D0:D0:FD:68:BC:70";;
        *) echo "Numero invalido!";;
      esac
      echo "RX = $RX" #check 
      awk -F, '$2 =="$RX" { print $0 }' File1 > File2[$i] #this is the line!
  i=$(( $i + 1 ))
  done
echo命令打印正确,但当我在AWK中使用与条件相同的“$RX”时,它不起作用(它打印空白页)。 我的文件1:

1417164082794,54:75:D0:3F:53:60,54:75:D0:3F:1E:F0,-752400,6 1417164082794,54:75:D0:3F:56:10,54:75:D0:3F:1E:F0,-932400,4 1417164082794,54:75:D0:3F:56:E0,54:75:D0:3F:1E:F0,-892400,4 1417164082794,54:75:D0:3F:5A:B0,54:75:D0:3F:1E:F0,-802400,4 1417164082794,54:75:D0:3F:53:60,54:75:D0:3F:1E:F0,-895000,2

你能告诉我“awk-F…”的正确表达吗


多谢各位

要将变量从shell传递到awk,请使用-v:

awk -F, -v R="$RX" '$2 ==R { print $0 }' File1 > File2[$i]

要将变量从shell传递到awk,请使用-v:

awk -F, -v R="$RX" '$2 ==R { print $0 }' File1 > File2[$i]

要将变量从shell传递到awk,请使用-v:

awk -F, -v R="$RX" '$2 ==R { print $0 }' File1 > File2[$i]

要将变量从shell传递到awk,请使用-v:

awk -F, -v R="$RX" '$2 ==R { print $0 }' File1 > File2[$i]

@Ricky-任何时候,只要你在shell中编写一个循环来处理文本,你就有了错误的方法。这并不是创建shell的目的——而是创建awk的目的,而创建shell是为了调用类似awk的命令

只需使用一个awk命令,而不是读取
文件
10次并为文件的每一行打开变量,只需全部执行一次,如下所示:

BEGIN {
    split(file2s,f2s)
    split("54:75:D0:3F:1E:F0\
           54:75:D0:3F:4D:00\
           54:75:D0:3F:51:50\
           54:75:D0:3F:53:60\
           54:75:D0:3F:56:10\
           54:75:D0:3F:56:E0\
           54:75:D0:3F:5A:B0\
           54:75:D0:3F:5F:90\
           D0:D0:FD:68:BC:70", rxs)
    for (i in rxs) {
        rx2file2s[rxs[i]] = f2s[i]
    }
}
{
    if ($2 in rx2file2s) {
        print > rx2file2s[$2]
    }
    else {
        print NR, $2, "Numero invalido!" | "cat>&2"
    }
}
然后将其作为
awk-v file2s=“${File2[@]}”-f script.awk File1


我之所以说“类似”,是因为您没有提供任何示例输入(File1内容)或预期输出(File2*值和内容),所以我无法测试它,但如果不完全正确,它将非常接近您所需的内容。

@Ricky-任何时候您在shell中编写循环只是为了操纵文本,您都有错误的方法。这并不是创建shell的目的——而是创建awk的目的,而创建shell是为了调用类似awk的命令

只需使用一个awk命令,而不是读取
文件
10次并为文件的每一行打开变量,只需全部执行一次,如下所示:

BEGIN {
    split(file2s,f2s)
    split("54:75:D0:3F:1E:F0\
           54:75:D0:3F:4D:00\
           54:75:D0:3F:51:50\
           54:75:D0:3F:53:60\
           54:75:D0:3F:56:10\
           54:75:D0:3F:56:E0\
           54:75:D0:3F:5A:B0\
           54:75:D0:3F:5F:90\
           D0:D0:FD:68:BC:70", rxs)
    for (i in rxs) {
        rx2file2s[rxs[i]] = f2s[i]
    }
}
{
    if ($2 in rx2file2s) {
        print > rx2file2s[$2]
    }
    else {
        print NR, $2, "Numero invalido!" | "cat>&2"
    }
}
然后将其作为
awk-v file2s=“${File2[@]}”-f script.awk File1


我之所以说“类似”,是因为您没有提供任何示例输入(File1内容)或预期输出(File2*值和内容),所以我无法测试它,但如果不完全正确,它将非常接近您所需的内容。

@Ricky-任何时候您在shell中编写循环只是为了操纵文本,您都有错误的方法。这并不是创建shell的目的——而是创建awk的目的,而创建shell是为了调用类似awk的命令

只需使用一个awk命令,而不是读取
文件
10次并为文件的每一行打开变量,只需全部执行一次,如下所示:

BEGIN {
    split(file2s,f2s)
    split("54:75:D0:3F:1E:F0\
           54:75:D0:3F:4D:00\
           54:75:D0:3F:51:50\
           54:75:D0:3F:53:60\
           54:75:D0:3F:56:10\
           54:75:D0:3F:56:E0\
           54:75:D0:3F:5A:B0\
           54:75:D0:3F:5F:90\
           D0:D0:FD:68:BC:70", rxs)
    for (i in rxs) {
        rx2file2s[rxs[i]] = f2s[i]
    }
}
{
    if ($2 in rx2file2s) {
        print > rx2file2s[$2]
    }
    else {
        print NR, $2, "Numero invalido!" | "cat>&2"
    }
}
然后将其作为
awk-v file2s=“${File2[@]}”-f script.awk File1


我之所以说“类似”,是因为您没有提供任何示例输入(File1内容)或预期输出(File2*值和内容),所以我无法测试它,但如果不完全正确,它将非常接近您所需的内容。

@Ricky-任何时候您在shell中编写循环只是为了操纵文本,您都有错误的方法。这并不是创建shell的目的——而是创建awk的目的,而创建shell是为了调用类似awk的命令

只需使用一个awk命令,而不是读取
文件
10次并为文件的每一行打开变量,只需全部执行一次,如下所示:

BEGIN {
    split(file2s,f2s)
    split("54:75:D0:3F:1E:F0\
           54:75:D0:3F:4D:00\
           54:75:D0:3F:51:50\
           54:75:D0:3F:53:60\
           54:75:D0:3F:56:10\
           54:75:D0:3F:56:E0\
           54:75:D0:3F:5A:B0\
           54:75:D0:3F:5F:90\
           D0:D0:FD:68:BC:70", rxs)
    for (i in rxs) {
        rx2file2s[rxs[i]] = f2s[i]
    }
}
{
    if ($2 in rx2file2s) {
        print > rx2file2s[$2]
    }
    else {
        print NR, $2, "Numero invalido!" | "cat>&2"
    }
}
然后将其作为
awk-v file2s=“${File2[@]}”-f script.awk File1


我之所以说“类似”,是因为您没有提供任何示例输入(File1内容)或预期输出(File2*值和内容),所以我无法对其进行测试,但如果不完全正确,它将非常接近您需要的内容。

变量不会在单引号中展开。awk中的变量与bash中的变量“$2=”“$RX”不同{print$0}@anishane不,永远不要这样做。请参阅以了解正确的方法。变量不会在单引号内展开。awk中的变量与bash中的变量“$2==”““$RX””{print$0}不同“@anishane不,永远不要这样做。请参阅以了解正确的方法。变量不会在单引号中展开。awk中的变量与bash中的变量“$2==”““$RX””{print$0}“@anishane no,永远不要这样做。请参阅以了解正确的方法。变量不会在单引号内展开。awk中的变量与bash中的变量“$2==”““$RX”“{print$0}”@anishane no,永远不要这样做。请参阅以了解正确的方法。并删除
{print$0}”
因为这是默认行为,所以显式指定它是没有用的。去掉
{print$0}
因为这是默认行为,所以显式指定它是没有用的。去掉
{print$0}
因为这是默认行为,所以显式指定它是没有用的。去掉
{print$0}
因为这是默认行为,所以显式指定它是无用的。