해결책을 찾으려고 노력 중이에요이것질문. 솔루션 으로 사용하고 싶습니다 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
내 에서 printf
대신 사용하면 내가 얻는 출력은 내가 원하는 결과가 아닙니다. 내가 원하는 출력은 이것이다print
awk
venkatvenkat3
venkat
venkat3
질문 2
이 값을 다음과 같이 사용하십시오.연관 배열아니면 이러한 값이 실제로 $1
열에 나타나는지 어떻게 알 수 있습니까?
나는 다음과 같은 것을 달성하고 싶습니다.
awk -F "_" '$2==1{print $1}' file
편집하다
awk
나는 Stephen의 해결책을 눈치 채지 못했습니다 . 내가 언급한 것과 같은 일을 하고 있나요?
답변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
--only-delimited
질문 1의 경우 ( -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