当RS =“”和FS =“ \ n”时,使用awk命令仅打印第一个单词

时间:2019-08-19 11:22:58

标签: bash awk grep find

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

我将'find'命令与'grep'一起使用以找到完全匹配的模式,并且按预期运行。该命令的返回是一个大字符串,我将该字符串设置为awk命令,以使用FS =“ \ n”逐行拆分它; RS =“”并以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-    parameter \B_param 129
    128 ./debug/21.file1.log-    parameter \A_param 129
    34 ./debug/21.file1.log-    parameter \B_param 128
    34 ./debug/21.file1.log-    parameter \A_param 128
      2 ./debug/21.file1.log-    parameter \B_param 66
      3 ./debug/21.file1.log-    parameter \A_param 66
     64 ./debug/21.file1.log-    parameter \B_param 65
     65 ./debug/21.file1.log-    parameter \A_param 65
      1 ./debug/21.file1.log-    parameter \B_param 65
      1 ./debug/21.file1.log-    parameter \A_param 65

需要:

128
128
34
34
2
3
64
65
1
1

比较,方法是:


    128==128 ? //equal do nth
    34==34 ? //equal do nth
    2==3 ? //not equal so print line $i (2 ./debug/21.file1.log-    parameter \B_param 66)
    64==65 ? //not equal print line $i (64 ./debug/21.file1.log-    parameter \B_param 65)
    1==1 ? //equal do nth

2 个答案:

答案 0 :(得分:1)

由于不存在结构,因此无法对其进行测试,请您尝试以下操作。我将从您的代码中删除$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]}}'

答案 1 :(得分: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