簡體   English   中英

零填充和排序 - Linux Shell Scripting

[英]zero-padding and sorting - Linux Shell Scripting

我試圖在Linux中進行一些文本文件操作。

我有一個名為names.txt的文件,如下所示:

A1
X12
B4
Y5
C10
Z23
B8
C3
Z6

我需要它看起來像這樣:

A01
B04
B08
C03
C10
X12
Y05
Z06
Z23

目標:我需要對單個數字進行零填充,然后按字母順序排列結果,並保存到文件sorted_names.txt

我想我需要先計算每行的字符數,如果字符數小於2,則加零。 最后我需要按字母順序排序。

對於初學者,我想我這樣做是為了計算每行的字符數:

cat names.txt | while read line
do

  count=$(echo $line | wc -c)
  echo $line $count

done

然后我的想法是循環計數:

for COUNT in $count
if [( $COUNT = "3" )];
then
    echo doZeroPadHere
fi

僅使用內置的Bash功能來執行此操作是否重要? 因為使用sedsort似乎更容易:

<names.txt sed 's/^\([A-Z]\)\([0-9]\)$/\10\2/' | sort >sorted_names.txt

這是一個僅使用Bash和sort的解決方案:

while read line
do 
    printf "%s%02d\n" ${line:0:1} ${line:1}
done <names.txt | sort >sorted.txt

這將從names.txt 讀取行,並將每個行分為第一個字符( ${line:0:1} )和第一個字符后面的其余部分( ${line:1} )。 它使用printf更多細節 )逐字打印第一個字符,並將其余部分作為0填充數字。 它重定向來自names.txt輸入(避免無用的cat ),將輸出管道sort ,並將其重定向到sorted.txt

這是使用awksort的一種方式:

awk '{ printf "%s%02d\n", substr($0,0,1), substr($0,2) | "sort" }' file

結果:

A01
B04
B08
C03
C10
X12
Y05
Z06
Z23

這是Perl的方法:

perl -lpe's/^([AZ])(\\d)$/${1}0$2/' names.txt

對於每一行,如果它只匹配一個字母和一個數字,則將其更改為字母,零和數字。 然后打印。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM