сценарий оболочки единый для цикла, как получить вывод из файла - PullRequest
0 голосов
/ 11 июля 2019

Исходный файл data.txt

A
B
.
.
.
Z

Исходный файл содержит от A до Z, каждый символ записывается в одну строку.

Результат Требуется

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

Примечание:из исходного файла нам нужно посчитать строку no.of и добавить это число к каждому разделенному символу.

Я получил решение, но мне нужно сделать в одном для оператора.

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 ]

1 голос
/ 11 июля 2019
awk '{for(i=1;i<=NR-FNR;i++) print $0,i}' OFS='_' file file

Причина, по которой это работает, заключается в том, что NR-FNR всегда равен нулю для первого чтения файла, а всегда - 26 для второго чтения файла.

1 голос
/ 11 июля 2019

Bash имеет функцию с именем mapfile для чтения файла в массиве.

mapfile -t data < data.txt
numbers=($(seq -f '%02.0f' "${#data[@]}"))
for line in "${data[@]}"; do
  printf "${line}_%s\n" "${numbers[@]}"
done
0 голосов
/ 11 июля 2019

Если вы согласны с awk, не могли бы вы попробовать следующее.

awk -v line=$(wc -l < Input_file) '{for(i=1;i<=line;i++) printf("%s_%02d\n",$0,i)}' Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...