源文件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
答案 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