1

我正在尝试在 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
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,并将每行拆分为其第一个字符 ( ${line:0:1}) 和第一个字符之后的行的其余部分 ( ${line:1})。它使用printf更多详细信息)逐字打印第一个字符,并将该行的其余部分作为 0 填充数字。它将其输入从重定向names.txt(避免无用的使用cat),将输出通过管道传输到sort,并将其重定向到sorted.txt.

于 2012-11-23T03:18:30.563 回答
0

awk这是使用and的一种方法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

对于每一行,如果它完全匹配一个字母和一个数字,请将其更改为字母、零和数字。然后打印。

于 2012-11-23T03:34:37.450 回答