首页 > 解决方案 > awk:第 1 行:在或附近出现语法错误,需要一些 bash 帮助

问题描述

这是代码,CN 部分正在工作,但是 awk ......

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

    windowsearch()
    {
        starting_line_number=$1
        ending_line_number=$2
        position=$3
        file_name=$4
        CN=$(head -40 "$4" | 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

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

编辑:对不起,这是我的第一个问题。

标签: bashsortingawk

解决方案


我对你意图的解释

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

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

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


推荐阅读