我試圖找到一個解決方案這問題。我想用於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
而不是,我得到的輸出不是我想要實現的。我想要的輸出是這樣的print
awk
venkatvenkat3
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