我有一个像这样的文件(user.csv)
ip,hostname,user,group,encryption,aduser,adattr
希望按用户打印所有列排序
我尝试了awk -F ":" '{print|"$3 sort -n"}' user.csv
,但它不起作用。
答案 0 :(得分:128)
仅sort
怎么样?
sort -t, -nk3 user.csv
其中
-t,
- 将分隔符定义为,
。
-n
- 为您提供数字排序。自从您添加它后添加
尝试。如果您的用户字段仅为文本,那么您不需要它。
-k3
- 定义字段(键)。 user是第三个字段。
答案 1 :(得分:12)
使用sed删除重复的用户ID,假设用户ID不包含任何空格。
awk -F, '{ print $3, $0 }' user.csv | sort | sed 's/^.* //'
答案 2 :(得分:7)
awk -F, '{ print $3, $0 }' user.csv | sort -nk2
和反向订单
awk -F, '{ print $3, $0 }' user.csv | sort -nrk2
答案 3 :(得分:7)
你可以选择一个分隔符,在这种情况下我选择了一个冒号并打印了第一列,按字母顺序排序:
awk -F\: '{print $1|"sort -u"}' /etc/passwd
答案 4 :(得分:5)
试试这个 -
awk '{print $0|"sort -t',' -nk3 "}' user.csv
OR
sort -t',' -nk3 user.csv
答案 5 :(得分:3)
awk -F "," '{print $0}' user.csv | sort -nk3 -t ','
这应该有效
答案 6 :(得分:0)
要从排序中排除第一行(标题),我将其分成两个缓冲区。
df | awk 'BEGIN{header=""; $body=""} { if(NR==1){header=$0}else{body=body"\n"$0}} END{print header; print body|"sort -nk3"}'
答案 7 :(得分:0)
看到最初的问题是关于如何使用 awk
而前 7 个答案中的每一个都使用 sort
代替,而且这是 Google 上的热门话题,这里是如何使用使用 awk
。
带有标题的示例 net.csv 文件:
ip,hostname,user,group,encryption,aduser,adattr
192.168.0.1,gw,router,router,-,-,-
192.168.0.2,server,admin,admin,-,-,-
192.168.0.3,ws-03,user,user,-,-,-
192.168.0.4,ws-04,user,user,-,-,-
还有 sort.awk:
#!/usr/bin/awk -f
# usage: ./sort.awk -v f=FIELD FILE
BEGIN {
FS=","
}
# each line
{
a[NR]=$0 ""
s[NR]=$f ""
}
END {
isort(s,a,NR);
for(i=1; i<=NR; i++) print a[i]
}
#insertion sort of A[1..n]
function isort(S, A, n, i, j) {
for( i=2; i<=n; i++) {
hs = S[j=i]
ha = A[j=i]
while (S[j-1] > hs) {
j--;
S[j+1] = S[j]
A[j+1] = A[j]
}
S[j] = hs
A[j] = ha
}
}
使用:
awk sort.awk f=3 < net.csv # OR
chmod +x sort.awk
./sort.awk f=3 net.csv