回答編集履歴
9
追加
test
CHANGED
@@ -77,3 +77,77 @@
|
|
77
77
|
while(n>0){ff=ff ar[n] "/";n--};sub("/$","",ff);printf "%-80s",ff}}print""}' | nkf -Swx
|
78
78
|
|
79
79
|
```
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
awkの簡単な説明ですが
|
84
|
+
|
85
|
+
```awk
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
awkはsedと同じように入力ファイル1行づつ処理を行います。
|
90
|
+
|
91
|
+
awk '{....}' <infile >outfile
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
1行のセパレータはデフォルト空白またはタブですそれ以外は-Fにて指定することができます。
|
96
|
+
|
97
|
+
今回はタブだけにしたいので-Fで指定しています。
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
詳しくは'awk wiki'でググッた方が良いです。分かり易いです。
|
102
|
+
|
103
|
+
今回使ったawkを解説します(分解して)
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
awk -F'\t' #タブのセパレータ指定
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
'{for(i=1;i<NF+1;i++){ #NFはタブ区切りのフィールド数 i:フィールドの位置として利用
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
if(i!=1){ #フィールドの一番目でない行判定
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
if(i==3){ printf"%2d",$i}\ #3番目のフィールドを2桁で表示
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
else if(i==4){printf"%10s",$i} #4番目のフィールドを10桁で表示
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
else{printf" %s",$i}} #1,3,4以外を表示
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
else{ff="";n=split($i,ar,"/");\ #1フィールド目を"/"で分解して配列arに挿入
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
while(n>0){ff=ff ar[n] "/";n--} #配列の最後から逆読みで/を加えてffに文字列追加
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
;sub("/$","",ff); #ff行の最後の余分な/を削除
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
printf "%-80s",ff} #ffを80桁の右詰で表示
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
}print""}' #ラインの改行を表示
|
148
|
+
|
149
|
+
```
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
|
8
変更
test
CHANGED
@@ -68,12 +68,12 @@
|
|
68
68
|
|
69
69
|
#!/bin/sh
|
70
70
|
|
71
|
-
find /home/ts21adm/test -printf "%p\t%M\t%n\t%s\t%TY-%Tm-%Td\t%TH:%TM\n" | nkf -Ws |\
|
71
|
+
find /home/ts21adm/test -printf "%p\t%M\t%n\t%s\t%TY-%Tm-%Td\t%TH:%TM\n" | nkf -Wsx |\
|
72
72
|
|
73
73
|
LANG=C awk -F'\t' '{for(i=1;i<NF+1;i++){if(i!=1){if(i==3){printf"%2d",$i}\
|
74
74
|
|
75
75
|
else if(i==4){printf"%10s",$i}else{printf" %s",$i}}else{ff="";n=split($i,ar,"/");\
|
76
76
|
|
77
|
-
while(n>0){ff=ff ar[n] "/";n--};sub("/$","",ff);printf "%-80s",ff}}print""}' | nkf -Sw
|
77
|
+
while(n>0){ff=ff ar[n] "/";n--};sub("/$","",ff);printf "%-80s",ff}}print""}' | nkf -Swx
|
78
78
|
|
79
79
|
```
|
7
追加
test
CHANGED
@@ -59,3 +59,21 @@
|
|
59
59
|
while(n>0){ff=ff ar[n] "/";n--};sub("/$","",ff);printf "%-120s",ff}}print""}'
|
60
60
|
|
61
61
|
```
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
実行環境のLANGをUTF8としています。表示用です。
|
66
|
+
|
67
|
+
```bash
|
68
|
+
|
69
|
+
#!/bin/sh
|
70
|
+
|
71
|
+
find /home/ts21adm/test -printf "%p\t%M\t%n\t%s\t%TY-%Tm-%Td\t%TH:%TM\n" | nkf -Ws |\
|
72
|
+
|
73
|
+
LANG=C awk -F'\t' '{for(i=1;i<NF+1;i++){if(i!=1){if(i==3){printf"%2d",$i}\
|
74
|
+
|
75
|
+
else if(i==4){printf"%10s",$i}else{printf" %s",$i}}else{ff="";n=split($i,ar,"/");\
|
76
|
+
|
77
|
+
while(n>0){ff=ff ar[n] "/";n--};sub("/$","",ff);printf "%-80s",ff}}print""}' | nkf -Sw
|
78
|
+
|
79
|
+
```
|
6
変更
test
CHANGED
@@ -44,18 +44,18 @@
|
|
44
44
|
|
45
45
|
|
46
46
|
|
47
|
-
と
|
47
|
+
タブをセパレータとして最大長を120としました。
|
48
48
|
|
49
49
|
```bash
|
50
50
|
|
51
51
|
#!/bin/sh
|
52
52
|
|
53
|
-
find /usr/local -printf "%p
|
53
|
+
find /usr/local -printf "%p\t%M\t%n\t%s\t%TY-%Tm-%Td\t%TH:%TM\n" | \
|
54
54
|
|
55
|
-
awk '{for(i=1;i<NF+1;i++){if(i!=1){if(i==3){printf"%2d",$i}\
|
55
|
+
awk -F'\t' '{for(i=1;i<NF+1;i++){if(i!=1){if(i==3){printf"%2d",$i}\
|
56
56
|
|
57
57
|
else if(i==4){printf"%10s",$i}else{printf" %s",$i}}else{ff="";n=split($i,ar,"/");\
|
58
58
|
|
59
|
-
while(n>0){ff=ff ar[n] "/";n--};sub("
|
59
|
+
while(n>0){ff=ff ar[n] "/";n--};sub("/$","",ff);printf "%-120s",ff}}print""}'
|
60
60
|
|
61
61
|
```
|
5
更新
test
CHANGED
@@ -41,3 +41,21 @@
|
|
41
41
|
done
|
42
42
|
|
43
43
|
```
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
とえあえずファイルパスの最大長を80としました。最終行の-80の部分で調整できます。
|
48
|
+
|
49
|
+
```bash
|
50
|
+
|
51
|
+
#!/bin/sh
|
52
|
+
|
53
|
+
find /usr/local -printf "%p %M %n %s %TY-%Tm-%Td %TH:%TM\n" | \
|
54
|
+
|
55
|
+
awk '{for(i=1;i<NF+1;i++){if(i!=1){if(i==3){printf"%2d",$i}\
|
56
|
+
|
57
|
+
else if(i==4){printf"%10s",$i}else{printf" %s",$i}}else{ff="";n=split($i,ar,"/");\
|
58
|
+
|
59
|
+
while(n>0){ff=ff ar[n] "/";n--};sub("\/$","",ff);printf "%-80s",ff}}print""}'
|
60
|
+
|
61
|
+
```
|
4
修正
test
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
|
19
19
|
printf" ";while(n>0){printf ar[n] "/";n--}printf "\n"}}}' | \
|
20
20
|
|
21
|
-
sed -e 's/^ //' -e s/\/$//'
|
21
|
+
sed -e 's/^ //' -e 's/\/$//'
|
22
22
|
|
23
23
|
```
|
24
24
|
|
3
追加
test
CHANGED
@@ -23,3 +23,21 @@
|
|
23
23
|
```
|
24
24
|
|
25
25
|
|
26
|
+
|
27
|
+
revを使ってみました
|
28
|
+
|
29
|
+
```bash
|
30
|
+
|
31
|
+
#!/bin/sh
|
32
|
+
|
33
|
+
find /usr/local/src -printf "%M %2n %10s %TY-%Tm-%Td %TH:%TM %p\n" | while read ff
|
34
|
+
|
35
|
+
do
|
36
|
+
|
37
|
+
echo "$ff" | rev | cut -d\ -f2- | rev | tr '\n' ' '
|
38
|
+
|
39
|
+
echo $ff | rev | cut -d\ -f1 | rev | awk '{n=split($1,ar,"/");while(n>0){printf ar[n] "/";n--}printf "\n"}' |sed 's/\/$//'
|
40
|
+
|
41
|
+
done
|
42
|
+
|
43
|
+
```
|
2
変更
test
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
|
19
19
|
printf" ";while(n>0){printf ar[n] "/";n--}printf "\n"}}}' | \
|
20
20
|
|
21
|
-
sed 's/\/$//'
|
21
|
+
sed -e 's/^ //' -e s/\/$//'
|
22
22
|
|
23
23
|
```
|
24
24
|
|
1
変更
test
CHANGED
@@ -4,16 +4,22 @@
|
|
4
4
|
|
5
5
|
階層を逆順で表示ですが、良いコマンドが見つからなかったのでawk
|
6
6
|
|
7
|
+
修正してみました
|
8
|
+
|
7
9
|
```bash
|
8
10
|
|
9
11
|
#!/bin/sh
|
10
12
|
|
11
|
-
find /usr/local -printf "%M %
|
13
|
+
find /usr/local -printf "%M %n %s %TY-%Tm-%Td %TH:%TM %p\n" | \
|
12
14
|
|
13
|
-
awk '{for(i=1;i<NF+1;i++){if(i!=NF){printf
|
15
|
+
awk '{for(i=1;i<NF+1;i++){if(i!=NF){if(i==2){printf"%2s",$i}\
|
14
16
|
|
17
|
+
else if(i==3){printf"%10s",$i}else{printf" %s",$i}}else{n=split($i,ar,"/");\
|
18
|
+
|
15
|
-
while(n>0){printf ar[n] "/";n--}printf "\n"}}}' | \
|
19
|
+
printf" ";while(n>0){printf ar[n] "/";n--}printf "\n"}}}' | \
|
16
20
|
|
17
21
|
sed 's/\/$//'
|
18
22
|
|
19
23
|
```
|
24
|
+
|
25
|
+
|