1

Linuxでテキストファイルを操作しようとしています。

次のようなnames.txtというファイルがあります。

A1
X12
B4
Y5
C10
Z23
B8
C3
Z6

そして、私はそれがこのように見える必要があります:

A01
B04
B08
C03
C10
X12
Y05
Z06
Z23

目標:1桁の数字をゼロで埋めてから、結果をアルファベット順に並べて、sorted_names.txtファイルに保存する必要があります。

最初に1行あたりの文字数を数える必要があると思います。文字数が2未満の場合は、ゼロを追加します。最後に、アルファベット順に並べ替える必要があります。

手始めに、私はこれを行って1行あたりの文字数を数えると思います。

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
4

4 に答える 4

2

組み込みのBash機能のみを使用してそれを行うことは重要ですか?使いやすいように見えるsedのでsort

<names.txt sed 's/^\([A-Z]\)\([0-9]\)$/\10\2/' | sort >sorted_names.txt
于 2012-11-23T02:18:42.573 に答える
1

Bashとsort:のみを使用したソリューションを次に示します。

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

これにより、から行が読み取らnames.txtれ、各行が最初の文字()と最初の文字()の後の残りの行に分割されます。(詳細)を使用して最初の文字を逐語的に印刷し、残りの行を0が埋め込まれた数字として印刷します。入力をからリダイレクトし(の無駄な使用を回避)、出力をにパイプし、それをにリダイレクトします。${line:0:1}${line:1}printfnames.txtcatsortsorted.txt

于 2012-11-23T03:18:30.563 に答える
0

awkandを使用する1つの方法は次のsortとおりです。

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

結果:

A01
B04
B08
C03
C10
X12
Y05
Z06
Z23
于 2012-11-23T02:29:40.687 に答える
0

これを行うPerlの方法は次のとおりです。

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

各行で、1文字と1桁に正確に一致する場合は、文字、ゼロ、および数字に変更します。次に、印刷します。

于 2012-11-23T03:34:37.450 に答える