awk:第 1 行:位于或附近的语法错误,需要 bash 的一些帮助

awk: line 1: syntax error at or near , need some help for bash

这是代码,CN 部分可以正常工作,但是 awk...

我运行在外面运行,看起来很清楚。我刚刚遇到 bash :(

    windowsearch()
    {
        starting_line_number=
        ending_line_number=
        position=
        file_name=
        CN=$(head -40 "" | sed -n "$starting_line_number","$ending_line_number p" ) 
        awk -v CN="$CN" -F "\t" '{ print CN }' "$file_name" | sort -n -k"$position"
    
    }


windowsearch 10 20 2 $imdbdir/tsv2/title.principals.tsv

期望的输出如下:

应该产生:

tt0000009    nm0085156,nm0063086,nm1309758,nm0183823
tt0000014    nm0166380,nm0525910,nm0244989
tt0000010    nm0525910
tt0000016    nm0525910
tt0000012    nm0525910,nm0525908
tt0000015    nm0721526
tt0000018    nm0804434,nm3692071
tt0000019    nm0932055
tt0000013    nm1715062,nm0525910,nm0525908
tt0000017    nm3691272,nm0804434,nm1587194,nm3692829
tt0000011    nm3692297,nm0804434

但我的输出为我提供了文件中的所有数据。所以,我认为我的过滤器不起作用。

编辑:抱歉造成误会,这是我的第一个问题。

我对你的意图的解读

您想根据给定的列对文件中的一系列行进行排序。

$ awk -v start=10 -v end=20 'start<=NR && NR<=end' | sort -n k2

只需在脚本中参数化输入值

您的问题缺少对任务的描述,理想情况下,缺少输入数据和所需输出的示例。很难从完全损坏的脚本片段中猜出某人的意图。一个可能的疯狂猜测可能是:

windowsearch() {
  awk "NR >  {exit}
       NR >= " < "" | sort -k ""
}

awk代码exits后超过行数上限,到达下限后打印整行。 (NR 是当前行号。)awk 的输出(即下限和上限之间的行间隔)得到 sorted(awk 本身也可以这样做,但在这种情况下使用 sort 会更短)。

示例(按挂载点(字段 2)对 /etc/fstab 行 9 到 13 进行排序):

windowsearch 9 13 2 /etc/fstab