刪除 awk 顯示中的空白行

刪除 awk 顯示中的空白行

我試圖找到一個解決方案問題。我想用於awk解決方案。

我的輸入檔如下所示。

-bash-3.2$ cat file
ramesh
ramesh_venkat
ramesh3_venkat3
ramesh4
ramesh5
venkat
venkat3
venkat4

我使用awk命令提取第二個值,如下_所示。

awk -F "_" '{print $2}' file

然而,儘管上面的命令列印了正確的值,但我在輸出中得到了空白行。我有 2 個問題。

問題1

如何刪除輸出中的空白行,以便在輸出中只得到venkat和?venkat3

如果我在 my 中使用printf而不是,我得到的輸出不是我想要實現的。我想要的輸出是這樣的printawkvenkatvenkat3

venkat
venkat3

問題2

使用這些值作為關聯數組或其他什麼,我怎麼知道這些值是否實際出現在$1列中?

我想要實現類似的目標,

awk -F "_" '$2==1{print $1}' file

編輯

我沒有註意到awk史蒂芬的解決方案。它在做我提到的同樣的事情嗎?

答案1

另一種方法:

問題1

awk -F_ '$2{print $2}' file

$2僅當定義時才會列印。這是一種更簡短的寫法:

awk -F_ '{if($2){print $2}}' file

問題2

沒有任何尚未解決的內容需要添加。

答案2

問題1

$ awk -F _ 'NF > 1 {print $2}' file
venkat
venkat3

問題2

$ awk -F _ '
    NR == FNR {a[$1];next}
    ($2 in a) {print $2}
' file file
venkat
venkat3

答案3

對於問題 1,您可以使用--only-delimited( -s) 選項cut

cut -s -f2 -d'_' file
venkat
venkat3

答案4

問題1

awk -F "_" '/_/ {print $2}' file

問題2

awk -F "_" '{values[$1]=1;}; END {for (val in values) print val;}' file

相關內容