ターミナル上でヘッダ行の位置は固定して中身だけをソート・シャッフルする
Pocket

ちょっとしたcsvファイルをソートする際、ヘッダーである1行目はそのままに中身だけソートする必要があったので、ちょっと調べてみた。
で、以下のようにすることで1行目の位置はそのままにソートが可能なので、備忘として残しておく。

awk 'NR==1;NR>1{print $0|"sort"}'
awk 'NR==1;NR>1{print $0|"sort -1krn"}' # 例1) 1列目で数字の降順
awk 'NR==1;NR>1{print $0|"shuf"}'       # 例2) ヘッダー以外の行でシャッフル
Sponsored Links

blacknon@BS-PUB-DEVELOP:~$ cat test1.csv
header1,header2,header3,header4,header5
Q1,Q2,Q3,Q4,Q5
N1,N2,N3,N4,N5
Y1,Y2,Y3,Y4,Y5
D1,D2,D3,D4,D5
W1,W2,W3,W4,W5
J1,J2,J3,J4,J5
P1,P2,P3,P4,P5
F1,F2,F3,F4,F5
C1,C2,C3,C4,C5
Z1,Z2,Z3,Z4,Z5
T1,T2,T3,T4,T5
R1,R2,R3,R4,R5
O1,O2,O3,O4,O5
K1,K2,K3,K4,K5
X1,X2,X3,X4,X5
A1,A2,A3,A4,A5
E1,E2,E3,E4,E5
U1,U2,U3,U4,U5
H1,H2,H3,H4,H5
B1,B2,B3,B4,B5
M1,M2,M3,M4,M5
L1,L2,L3,L4,L5
V1,V2,V3,V4,V5
I1,I2,I3,I4,I5
G1,G2,G3,G4,G5
S1,S2,S3,S4,S5
blacknon@BS-PUB-DEVELOP:~$
blacknon@BS-PUB-DEVELOP:~$ # 普通にsortした場合
blacknon@BS-PUB-DEVELOP:~$ cat test.csv | sort
A1,A2,A3,A4,A5
B1,B2,B3,B4,B5
C1,C2,C3,C4,C5
D1,D2,D3,D4,D5
E1,E2,E3,E4,E5
F1,F2,F3,F4,F5
G1,G2,G3,G4,G5
H1,H2,H3,H4,H5
I1,I2,I3,I4,I5
J1,J2,J3,J4,J5
K1,K2,K3,K4,K5
L1,L2,L3,L4,L5
M1,M2,M3,M4,M5
N1,N2,N3,N4,N5
O1,O2,O3,O4,O5
P1,P2,P3,P4,P5
Q1,Q2,Q3,Q4,Q5
R1,R2,R3,R4,R5
S1,S2,S3,S4,S5
T1,T2,T3,T4,T5
U1,U2,U3,U4,U5
V1,V2,V3,V4,V5
W1,W2,W3,W4,W5
X1,X2,X3,X4,X5
Y1,Y2,Y3,Y4,Y5
Z1,Z2,Z3,Z4,Z5
header1,header2,header3,header4,header5
blacknon@BS-PUB-DEVELOP:~$
blacknon@BS-PUB-DEVELOP:~$ # Header
blacknon@BS-PUB-DEVELOP:~$ cat test.csv | awk 'NR==1;NR>1{print $0|"sort"}'
header1,header2,header3,header4,header5
A1,A2,A3,A4,A5
B1,B2,B3,B4,B5
C1,C2,C3,C4,C5
D1,D2,D3,D4,D5
E1,E2,E3,E4,E5
F1,F2,F3,F4,F5
G1,G2,G3,G4,G5
H1,H2,H3,H4,H5
I1,I2,I3,I4,I5
J1,J2,J3,J4,J5
K1,K2,K3,K4,K5
L1,L2,L3,L4,L5
M1,M2,M3,M4,M5
N1,N2,N3,N4,N5
O1,O2,O3,O4,O5
P1,P2,P3,P4,P5
Q1,Q2,Q3,Q4,Q5
R1,R2,R3,R4,R5
S1,S2,S3,S4,S5
T1,T2,T3,T4,T5
U1,U2,U3,U4,U5
V1,V2,V3,V4,V5
W1,W2,W3,W4,W5
X1,X2,X3,X4,X5
Y1,Y2,Y3,Y4,Y5
Z1,Z2,Z3,Z4,Z5

というか、こういう風にしてawkからOSコマンドを呼べるとは知らなかった。
調べて見るものだ。

Pocket

Written by blacknon

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

メールアドレスが公開されることはありません。

*