Shell脚本单一的for循环如何从文件获取输出

时间:2019-07-11 12:08:23

标签: bash shell for-loop

源文件data.txt

A
B
.
.
.
Z

源文件包含A到Z,每个字符写在一行中。

需要结果

A_01
A_02
.
.
.
A_26
B_01
.
.
B_26
.
.
.
Z_01
.
.
Z_26

注意:从源文件中,我们需要计算行号并将该数字添加到每个分割字符中。

我有一个解决方案,但是我需要做一个陈述。

end=`wc -l data.txt | awk '{print $1}'`

for i in $(cat data.txt )
do
  for j in `seq $end`
  do
    echo "$i"_"$j"
  done 
done

3 个答案:

答案 0 :(得分:1)

awk '{for(i=1;i<=NR-FNR;i++) print $0,i}' OFS='_' file file

之所以可行,是因为NR-FNR在文件的第一次读取中始终为零,而在文件的第二次读取中始终为26。

答案 1 :(得分:1)

Bash具有一个名为mapfile的功能,可以读取数组中的文件。

mapfile -t data < data.txt
numbers=($(seq -f '%02.0f' "${#data[@]}"))
for line in "${data[@]}"; do
  printf "${line}_%s\n" "${numbers[@]}"
done

答案 2 :(得分:0)

如果您对awk表示满意,请尝试以下。

awk -v line=$(wc -l < Input_file) '{for(i=1;i<=line;i++) printf("%s_%02d\n",$0,i)}' Input_file