나는 단순히 열과 다음 데이터를 인쇄하려고 $4
합니다 $NF
.
000 0 00 NUL '\0' (null character) 100 64 40 @
001 1 01 SOH (start of heading) 101 65 41 A
002 2 02 STX (start of text) 102 66 42 B
003 3 03 ETX (end of text) 103 67 43 C
004 4 04 EOT (end of transmission) 104 68 44 D
005 5 05 ENQ (enquiry) 105 69 45 E
006 6 06 ACK (acknowledge) 106 70 46 F
007 7 07 BEL '\a' (bell) 107 71 47 G
010 8 08 BS '\b' (backspace) 110 72 48 H
이렇게 하면 다음과 같은 결과를 얻을 수 있습니다.
NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
@
A
B
C
D
E
F
G
H
첫 번째 작업이 완료될 때 까지 awk
기다린 후 다음 열의 인쇄를 수행합니다.
나는 시도했다:
awk '{print $4} {print $NF}'
그러나 이는 분명히 그것들을 하나씩 인쇄하여 모두 함께 혼합하는 것입니다.
더 잘 이해하고 장난치기 위해 노력 중입니다 awk
. 양해해 주시기 바랍니다.
답변1
AFAIK, 이 값을 저장 하고 블록 $NF
으로 인쇄 해야 합니다END
awk '{a[NR] = $NF; print $4} END{for(i=1;i<=NR;i++) print a[i]}' file
또는 파일에 대해 두 번의 패스를 수행합니다.
awk 'NR==FNR {print $4; next} {print $NF}' file file
답변2
@steeldriver는 awk에서 이 작업을 완전히 수행하는 방법을 보여 주었습니다. 이 특정 질문에 필요한 것 이상이지만 매우 유용한 것도 고려하십시오.장식-정렬-비장식 관용구다음과 같은 질문의 경우:
$ awk -v OFS='\t' '{print 1, NR, $4 ORS 2, NR, $NF}' file | sort -nk1,2 | cut -f3-
NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
@
A
B
C
D
E
F
G
H
sorted_in
다음과 같이 GNU awk에서 정확히 유사한 것을(배열의 배열 합에 대해) 구현할 수 있습니다 .
$ awk '
{ a[1][NR]=$4; a[2][NR]=$NF }
END {
PROCINFO["sorted_in"] = "@ind_num_asc"
for (i in a) for (j in a[i]) print a[i][j]
}
' file
NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
@
A
B
C
D
E
F
G
H
답변3
사용 awk
:
$ awk '{print $4; a = ((a) ? a ORS : "") $NF} END{print a}' file
@EdMorton이 제안한 더 간단하고 효율적인 접근 방식은 다음과 같습니다.
$ awk '{print $4; a=a $NF ORS} END{printf "%s", a}' file
사용 awk
및 datamash
:
$ awk '{print $4, $NF}' file | datamash -W --output-delimiter $'\n' transpose
다음 명령의 출력은 다음과 같습니다.
$ awk '{print $4, $NF}' ex | datamash -W transpose
NUL SOH STX ETX EOT ENQ ACK BEL BS
@ A B C D E F G H
여기서 출력 값은 tab
다음과 같이 구분됩니다.--output-delimiter
도착하다 \n
.
$ awk '{print $4, $NF}' ex | datamash -W --output-delimiter $'\n' transpose
NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
@
A
B
C
D
E
F
G
H