записать данные в файл в форме Formta - PullRequest
0 голосов
/ 30 мая 2019

У меня есть данные в следующем формате: ФАЙЛ 1

NAME :  Ram 
AGE :  12
NAME :  Rahul
AGE:  13
NAME:   Raj
AGE:   14

Мой желаемый вывод => В этом формате ниже мне нужно

Я хочу записать данные в ФАЙЛ 2 в следующем формате:

NAME| AGE
Ram|12
Rahul|13
Raj|14

Мой код:

head -2 file1.txt | nl | tr '\n' '|' >> file2.txt

Но мой вышеприведенный код печатается только в первых двух строках в File2.txt

1 NAME : Ram | 2 AGE : 12|

он должен зацикливаться до конца и записывать в файл 2

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Комментарии в коде. Сценарий:

# input test file as provided by OP
cat <<EOF >file
NAME :  Ram 
AGE :  12
NAME :  Rahul
AGE:  13
NAME:   Raj
AGE:   14
EOF

# My first solution - a simple bash while read loop
echo "NAME|AGE"
while IFS=': ' read -r _ name && IFS=': ' read -r _ age; do
    echo "$name|$age"
done <file

# Second solution - some parsing + xargs
# first remove spaces, then substitue `:` for a space
# then run printf, don't print any NAME and AGE %.0s and print the names and ages %s
echo "NAME|AGE"
<file tr -d ' ' | tr ':' ' ' | xargs printf "%.0s%s|%.0s%s\n"

# Third solution - sed!
# first remove spaces and remove everything before :
# then read two lines, substitue newline for a | and print
echo "NAME|AGE"
<file sed 's/ //g; s/.*://' | sed 'N;s/\n/|/'

выведет:

NAME|AGE
Ram|12
Rahul|13
Raj|14
NAME|AGE
Ram|12
Rahul|13
Raj|14
NAME|AGE
Ram|12
Rahul|13
Raj|14

Протестировано на Учебное пособие

0 голосов
/ 31 мая 2019

Следующий скрипт будет делать то, что вы хотите

#!/bin/bash
input="./file1.txt"
evenLine=0

# this will overwrite file2.txt
echo "Name|Age" > file2.txt

# loop over all lines
while IFS= read -r line
do
  if [ 0 -eq $evenLine ]
  then
    # -n to not append newline, remove string "Name: "
    echo -n "$line" | sed -e "s/Name: *//g" >> file2.txt
    evenLine=1
  else
    # replace "Age: " with " | "
    echo "$line" | sed -e "s/Age: */ | /g" >> file2.txt
    evenLine=0
  fi
done < "$input"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...