導航:首頁 > 操作系統 > linuxsortk

linuxsortk

發布時間:2025-02-24 13:38:37

linux:cut、sort都是針對列操作,有沒有對行操作的命令

sort命令用於對文檔內容進行排序處理,命令使用格式如下:
sort 選項 文件1 文件2 ......
sort命令的常用選項包括:
-t 指定分割文本的分隔符
-k 指定按照分割後文本內容的第幾列排序
-r 結果降序排序
-n 把文本轉換為數值再排序
使用sort命令的示例如下:
①sort -rn -k 2 f1:按照文檔第二列的數值大小進行降序排序。-n表示按照數值大小比較排序,默認為升序,加上-r表示為降序,-k指定按照第幾列排序。
②sort -rn -u -k 2 f1:-u表示去除重復行。
③sort -t ":" -rn -k 2 f1:-t指定列之間的分隔符為「:」,不寫則默認空格作為分隔符。
cut命令用於顯示按照分隔符截取分指定列的文本內容,命令使用格式如下:
cut 選項 文件1 文件2 ......
cut命令的常用選項包括:
-d 指定文本分隔符
-f 指定顯示分割後文本的第幾列
cut -d " " -f 3 f1:截取文檔中的第三列。-d指定分隔符為一個空格,-f指定顯示第幾列。但是,cut命令對分隔符連續較多的情況,審核較為死板,很難按照我們想要的效果實現截取,如有以下文件:
aaa 111 ccc
bbb 222 ccc
每行文字中各列間的空格數不同,「aaa」與「111」之間有一個空格,而「bbb」與「222」之間有兩個空格,在使用cut命令時,如果設定分隔符為一個空格,希望截取用空格隔開的文字時,對於行「bbb 222」由於文字中存在二個空格,其中的第二個空格則被視為第二列,所以cut命令不會把「222」視為第二列而是第三列。因此,cut在截取數量不確定的空格隔開的文字時十分不便。所以一般在連續分隔符個數不統一時,更習慣使用awk命令。

㈡ linuxawk數組排序多種實現方法

復制代碼代碼如下:
[chengmo@localhost ~]$ awk 'BEGIN{info = "this is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}'
4 test
1 this
2 is
3 a

如果需要按照順序輸出,通過鍵值定位方式輸出。

復制代碼代碼如下:
[chengmo@localhost ~]$ awk 'BEGIN{info = "this is a test";slen=split(info,tA," ");for(i=1;i<=slen;i++){print i,tA[i];}}'
1 this
2 is
3 a
4 test

一、通過內置函數(asort,asorti使用) awk 3.1以上版本才支持

1、asort使用說明
srcarrlen=asort[srcarr,dscarr] 默認返回值是:原數組長度,傳入參數dscarr則將排序後數組賦值給dscarr.

復制代碼代碼如下:
[chengmo@localhost ~]$ awk 'BEGIN{
a[100]=100;
a[2]=224;
a[3]=34;
slen=asort(a,tA);
for(i=1;i<=slen;i++)
{print i,tA[i];}
}'
1 34
2 100
3 224

asort只對值進行了排序,因此丟掉原先鍵值。

2、asorti 使用說明

復制代碼代碼如下:
[chengmo@localhost ~]$ awk 'BEGIN{
a["d"]=100;
a["a"]=224;
a["c"]=34;
slen=asorti(a,tA);
for(i=1;i<=slen;i++)
{print i,tA[i],a[tA[i]];}
}'
1 a 224
2 c 34
3 d 100

asorti對鍵值 進行排序(字元串類型),將生成新的數組放入:tA中。

二、通過管道發送到sort排序

復制代碼代碼如下:
[chengmo@localhost ~]$awk 'BEGIN{
a[100]=100;
a[2]=224;
a[3]=34;
for(i in a)
{print i,a[i] | "sort -r -n -k2";}
}'
2 224
100 100
3 34

通過管道,發送到外部程序「sort」排序,-r 從大到小,-n 按照數字排序,-k2 以第2列排序。通過將數據丟給第3方的sort命令,所有問題變得非常簡單。如果以key值排序 –k2 變成 -k1即可。

復制代碼代碼如下:
[chengmo@localhost ~]$ awk 'BEGIN{
a[100]=100;
a[2]=224;
a[3]=34;
for(i in a)
{print i,a[i] | "sort -r -n -k1";}
}'
100 100
3 34
2 224

三、自定義排序函數

awk自定義函數結構:

復制代碼代碼如下:
function funname(p1,p2,p3)
{
staction;
return value;
}

以上是:awk自定義函數表示方式,默認傳入參數都是以引用方式傳入,return值,只能是字元型或者數值型。 不能返回數組類型。 如果返回數組類型。需要通過形參 方式傳入。再獲得。

awk返回數組類型

awk 'function test(ary){ for(i=0;i<10;i++){ ary[i]=i; } return i;}BEGIN{ n=test(array); for(i=0;i<n;i++){ print array[i]; }}'

排序函數

復制代碼代碼如下:
#arr 傳入一維數組

#key 排序類型 1是按照值排序 2按照鍵值

#datatype 比較類型 1按照數字排序 2按照字元串排序

#tarr 排序返回的數組

#splitseq 分割字元串 數組中鍵與值之間分割字元串

#return 數組長度

#實現思路,將原始數組a[『a』]=100 排序後變成 a[1]=a分隔符100 ,然後按照下標遞歸顯示內容。 本排序使用冒泡方式進行。

function sortArr(arr,key,datatype,tarr,splitseq)
{

if(key ~ /[^1-2]/)
{return tarr;}
for(k in arr)
{
tarr[++alen]=(k""splitseq""arr[k]);
}

for(m=1;m<=alen;m++)
{
for(n=1;n<=alen-m-1;n++)
{
split(tarr[m],tm,splitseq);
split(tarr[n+1],tn,splitseq);

tnum=tarr[m];
if(datatype==1)
{
if(tm[key]+0<tn[key]+0)
{
tarr[m]=tarr[n+1];
tarr[n+1]=tnum;
}
}
else
{
if((tm[key]"") < (tn[key]""))
{
tarr[m]=tarr[n+1];
tarr[n+1]=tnum;
}
}
}
}
return alen;
}

完整代碼如下:

復制代碼代碼如下:
[chengmo@centos5 ~]$ awk 'BEGIN{
a["a"]=100;
a["b"]=110;
a["c"]=10;
splitseq="%%";
alen=sortArr(a,2,1,tarr,splitseq);
for(m=1;m<=alen;m++)
{
split(tarr[m],ta,splitseq);
print m,ta[1],ta[2];
}
}
function sortArr(arr,key,datatype,tarr,splitseq)
{

if(key ~ /[^1-2]/)
{return tarr;}
for(k in arr)
{
tarr[++alen]=(k""splitseq""arr[k]);
}

for(m=1;m<=alen;m++)
{
for(n=1;n<=alen-m-1;n++)
{
split(tarr[m],tm,splitseq);
split(tarr[n+1],tn,splitseq);

tnum=tarr[m];
if(datatype==1)
{
if(tm[key]+0<tn[key]+0)
{
tarr[m]=tarr[n+1];
tarr[n+1]=tnum;
}
}
else
{
if((tm[key]"") < (tn[key]""))
{
tarr[m]=tarr[n+1];
tarr[n+1]=tnum;
}
}
}
}
return alen;
}
'

1 b 110
2 a 100
3 c 10

以上是awk數組排序一些方法。對於少量數據排序,就性能而言,使用自定義函數性能要高,不需要另外再開啟進程。對於大量數據,排序第2種方法還是很不錯的。


閱讀全文

與linuxsortk相關的資料

熱點內容
如何利用肉雞搭建ftp伺服器 瀏覽:442
用戶名已加密怎麼辦 瀏覽:138
js怎麼樣上傳到文件到伺服器地址 瀏覽:575
省錢吖app裡面的錢怎麼套出來 瀏覽:588
ove轉pdf 瀏覽:305
八字油槽編程 瀏覽:235
遙望app怎麼重新注冊 瀏覽:402
石墨文檔導出到手機的哪個文件夾 瀏覽:494
scratch編程校本教材 瀏覽:93
如何把多個文件夾一起解壓 瀏覽:908
兒童編程免費教學20節課 瀏覽:118
java判斷時間格式 瀏覽:906
分析程序員招聘分析程序員 瀏覽:117
soul蘋果會員為什麼比安卓貴 瀏覽:860
安卓ncm怎麼轉換成mp3 瀏覽:714
山東百兆伺服器雲伺服器 瀏覽:879
安卓主題怎麼自定義 瀏覽:322
抓包如何知道是不是加密介面 瀏覽:248
prebuild增加編譯文件 瀏覽:959
遺憾值演算法反復逸代 瀏覽:800