【问题标题】:print only first word using awk command when RS="" and FS="\n"当 RS="" 和 FS="\n" 时使用 awk 命令只打印第一个单词
【发布时间】:2019-12-24 14:45:43
【问题描述】:

在使用 FS ="\n" 时需要 awk 命令帮助以仅打印行的第一个单词; RS = "" 我想比较第一行的第一个单词和第二行的第一个单词,依此类推。

我使用带有 'grep' 的 'find' 命令来查找完全匹配的模式,它按我的预期工作。该命令的返回是一个大字符串,我将此字符串设置为 awk 命令,以使用 FS ="\n"; 逐行拆分它。 RS = "" 和 for 循环,条件以 NF 为界,并分别显示每一行。

find . -name 21* -path "*/path1/*" -exec grep -FHI -A 4 -we "\$dup" {} \; | egrep "(A|B)_param" | sort | uniq -c | sort -nrk 5 | awk 'BEGIN{FS ="\n"; RS = ""}{ for (i = 1; i <= NF; i++) {print i $i}}'

只需要打印第 $i 行的第一个单词,并与第 $i+1 行的第一个单词进行比较。

得到:

128 ./debug/21.file1.log-参数\B_param 129 128 ./debug/21.file1.log- 参数\A_param 129 34 ./debug/21.file1.log- 参数 \B_param 128 34 ./debug/21.file1.log- 参数\A_param 128 2 ./debug/21.file1.log- 参数 \B_param 66 3 ./debug/21.file1.log- 参数\A_param 66 64 ./debug/21.file1.log- 参数\B_param 65 65 ./debug/21.file1.log- 参数\A_param 65 1 ./debug/21.file1.log- 参数 \B_param 65 1 ./debug/21.file1.log- 参数\A_param 65

需要:

128
128
34
34
2
3
64
65
1
1

比较这样:

128==128? //等于第n次 34==34? //等于第n次 2==3 ? //不等于所以打印行 $i (2 ./debug/21.file1.log- 参数 \B_param 66) 64==65? //不等于打印行 $i (64 ./debug/21.file1.log- 参数 \B_param 65) 1==1? //等于第n次

【问题讨论】:

    标签: bash awk grep find


    【解决方案1】:
    echo "Got text" | awk '
        (NR % 2) == 1 {prev_id=$1; prev_line=$0; next}
        $1 != prev_id {print prev_line}
    '
    
      2 ./debug/21.file1.log-    parameter \B_param 66
     64 ./debug/21.file1.log-    parameter \B_param 65
    

    【讨论】:

      【解决方案2】:

      由于结构不存在,无法对其进行测试,请您尝试以下操作。我从您的代码中删除 $i 并仅打印 i,这可能会根据您的需要给出结果。

      find . -name 21* -path "*/path1/*" -exec grep -FHI -A 4 -we "\$dup" {} \; | egrep "(A|B)_param" | sort | uniq -c | sort -nrk 5 | awk 'BEGIN{FS ="\n"; RS = ""}{ for (i = 1; i <= NF; i++) {print i}}'
      

      如果上述方法不起作用,请尝试以下操作。

      find . -name 21* -path "*/path1/*" -exec grep -FHI -A 4 -we "\$dup" {} \; | egrep "(A|B)_param" | sort | uniq -c | sort -nrk 5 | awk 'BEGIN{FS ="\n"; RS = ""}{ for (i = 1; i <= NF; i++) {split(i,array," ");print array[1]}}'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-02-04
        • 1970-01-01
        • 2020-04-06
        • 2014-04-07
        • 1970-01-01
        • 2021-09-29
        • 2016-12-04
        相关资源
        最近更新 更多