Как мне соединить строки, используя пробел и запятую - PullRequest
0 голосов
/ 28 января 2019

У меня есть файл, который содержит содержимое, например:

IP
111
22
25

Я хочу напечатать вывод в формате IP 111,22,25.

Я пробовал tr ' ' ,, но он не работает

Ответы [ 6 ]

0 голосов
/ 29 января 2019

Добро пожаловать на paste

$ paste -sd " ," file
IP 111,22,25

Обычно paste выполняет запись в стандартные выходные строки, состоящие из последовательно соответствующих строк каждого данного файла, разделенных символом .Опция -s делает это по-другому.В нем говорится вставлять каждую строку файлов последовательно с символом в качестве разделителя.При использовании флага -d вы можете указать список разделителей, которые будут использоваться вместо символа .Здесь я привел в качестве списка " ," с указанием, используйте пробел и затем только запятые.

0 голосов
/ 29 января 2019

Использование Perl

$ cat captain.txt
IP
111
22
25

$ perl -0777 -ne ' @k=split(/\s+/); print $k[0]," ",join(",",@k[1..$#k]) ' captain.txt
IP 111,22,25
$
0 голосов
/ 29 января 2019

Я бы пошел с:

{ read a; read b; read c; read d; } < file
echo "$a $b,$c,$d"

Это также будет работать:

xargs printf "%s %s,%s,%s" < file
0 голосов
/ 28 января 2019

В чистом виде:

# Read file into array
mapfile -t lines < infile

# Print to string, comma-separated from second element on
printf -v str '%s %s' "${lines[0]}" "$(IFS=,; echo "${lines[*]:1}")"

# Print
echo "$str"

Выход:

IP 111,22,25
0 голосов
/ 28 января 2019

Попробуйте cat file.txt | tr '\n' ',' | sed "s/IP,/IP /g"

tr удаляет новые строки, sed меняет IP,111,22,25 на IP 111,22,25

0 голосов
/ 28 января 2019

Следующий скрипт awk выполнит запрошенное:

awk 'BEGIN{OFS=","} FNR==1{first=$0;next} {val=val?val OFS $0:$0} END{print first FS val}' Input_file

Объяснение: Добавление пояснения к приведенному выше коду сейчас.

awk '                      ##Starting awk program here.
BEGIN{                     ##Starting BEGIN section here of awk program.
  OFS=","                  ##Setting OFS as comma, output field separator.
}                          ##Closing BEGIN section of awk here.
FNR==1{                    ##Checking if line is first line then do following.
  first=$0                 ##Creating variable first whose value is current first line.
  next                     ##next keyword is awk out of the box keyword which skips all further statements from here.
}                          ##Closing FNR==1 BLOCK here.
{                          ##This BLOCK will be executed for all lines apart from 1st line.
  val=val?val OFS $0:$0    ##Creating variable val whose values will be keep concatenating its own value.
}
END{                       ##Mentioning awk END block here.
  print first FS val       ##Printing variable first FS(field separator) and variable val value here.
}' Input_file              ##Mentioning Input_file name here which is getting processed by awk.
...