나는 이에 대한 해결책을 찾으려고 노력했다.이것질문. 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
. 내가 언급한 것과 같은 일을 하고 있나요?
답변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